ruby on rails - How to lazy-set Mongoid association -
i have 2 models associated has_one
relationship. have callback initializes association. classes (roughly) this:
class user has_one :relevance, class_name: 'user::relevance', inverse_of: :user, dependent: :destroy after_create :initialize_relevance def initialize_relevance self[:relevance] = user::relevance.new end # other garbage *should* irrelevant end class user::relevance belongs_to :user, inverse_of: :relevance, index: true # more other garbage *should* irrelevant end
sometimes relevance association gets wonked state nil. when happens, want re-initialize relationship when called , return instead of nil. in class user
, have this:
def relevance self[:relevance] = user::relevance.new if self[:relevance].nil? self[:relevance] end
except doesn't work , nil
still returned. i've tried same update_attribute(user::relevance.new)
, self.create_relevance
nil
seems returned. not sure go here , love ideas. can provide more code or examples if helpful.
additional details:
- we're using mongoid our database.
- we don't have other callbacks affect
relevance
.
mongoid supports autobuilding one-to-one relations. should (no hooks or getter overrides needed).
has_one :relevance, class_name: 'user::relevance', inverse_of: :user, dependent: :destroy, autobuild: true
as option name hints, relevance
spring life upon access (if nil before access).
also, aware way relevance not persisted, right?
after_create :initialize_relevance def initialize_relevance self[:relevance] = user::relevance.new end
so no wonder returns nil
later on.
Comments
Post a Comment