Booleans and ActiveRecord::Callbacks
I lost a few hours while I puzzled my way through this one.
Let’s take an ActiveFedora model:
class Document < ActiveFedora::Base
before_create :status_is_active, :public_is_false
property :public_domain, predicate: "http://namespace/publicDomain", multiple: false
def public_is_false
self.public_domain = false
end
end
When our documents are created, by default, they aren’t public domain. Makes sense. Ok, but try and save this:
> doc = Document.create
=> false
Huh? And then I remembered–only after some time had passed–that methods will return the most recent
value of whatever was last called. So, public_is_false
was not only setting the property to false
but returning it as well. When the method returns false, that prevents it from saving.
To fix:
def public_is_false
self.public_domain = false
true
end
Looks a bit odd, but it works!