I\'m trying to set a boolean field to false based on the value of another boolean field. I tried the following with an ActiveRecord model:
before_save :reconc
before_save
is only called after validation has passed. What you need to do is move reconcile_xvent
up to before_validation
rather than before_save
If you keep that method in before_save
what will happen is that it thinks that xvent_hood
is null, if you have a validation that checks for nullity of xvent_hood
it will fail before the before_save
gets called. Which probably explains why you got RecordNotSaved
error.
Another thing to keep in mind is that if you have a boolean property, you also can't use validate_presence_of
. See http://alexanderwong.me/post/16084280769/rails-validate-presence-of-boolean-and-arrays-mongoid
I just hit this issue also, the problem with the first block of code is that you're assigning the xvent_hood
value to false which is then returned by your before_save method.
as per
Canceling callbacks
If a before_* callback returns false, all the later callbacks and the associated action are cancelled. If an after_* callback returns false, all the later callbacks are cancelled. Callbacks are generally run in the order they are defined, with the exception of callbacks defined as methods on the model, which are called last.
from http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html