Riddle me this

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.

Pair with one of our expert developers to level up your skills with Coaching by thoughtbot. Save time learning best practices and techniques for reducing technical debt in Ember, Ruby, Haskell, and Go in 1-on-1 sessions tailored to your goals.