My question is similar to this one How to skip ActiveRecord callbacks? but instead of AR I'm using Mongoid, It seems like that isn't implemented yet in the current version of Mongoid, so I'd like to know what should be an elegant solution to implement it. (if necessary).
Yes you can!
Mongoid is built on ActiveModel and ActiveModel has a skip_callback function. You can use skip_callback
like this:
# skip the callback
MyModelClass.skip_callback(:save, :before, :ensure_foo_is_not_bar)
# rescue any errors to ensure callback is restored afterwords
begin
my_model_instance.update_attributes :foo => 'bar'
rescue
puts "Error from 'my_model_instance.update_attributes': #{$!}"
end
# restore the callback for future calls
MyModelClass.set_callback(:save, :before, :ensure_foo_is_not_bar)
I'm using this without a hitch in a big app. For more info, see this blog post by Jeff Kreeftmeijer:
http://jeffkreeftmeijer.com/2010/disabling-activemodel-callbacks/