Riddle me this

Matt Jankowski

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])

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.