---
title: Riddle me this
teaser:
tags: web,rails
author: Matt Jankowski
published_on: 2008-02-12
---

Does anyone have a valid use case for `ActiveRecord::Base#toggle!` - inquiring
minds want to know!

The implementation from the rails codebase...

    def toggle!(attribute)
      toggle(attribute).update_attribute(attribute, self[attribute])
    end

So you send an `ActiveRecord` instance an attribute whose state you want to flip
around, it flips it around, then it saves the instance with `#update_attribute`,
which means no validations will be run.

Here's an example...

    >> user = User.find :first
    => #<User id: 1, first_name: nil, last_name: nil, sysadmin: false, ...>
    >> user.sysadmin?
    => false
    >> user.toggle! :sysadmin
    => true
    >> user.reload.sysadmin?
    => true

...the problem is that while it's easy to come up with ways that you CAN use
this feature, we can't come up with a use case where you SHOULD use this
feature.  Please enlighten us - but be warned that your reply will be evaluated
within the context of various best practice rules that you may or may not be
aware of.
