has_one
の関係で関連付けられた2つのモデルがあります。また、関連付けを初期化するコールバックもあります。クラスが見える(おおよそ)このように:Mongoidアソシエーションを遅延設定する方法
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 that *should* be irrelevant
end
class User::Relevance
belongs_to :user, inverse_of: :relevance, index: true
# more other garbage that *should* be irrelevant
end
時々、関連性の関連付けは、それがnilであるwonked状態になります。これが起こると、関係が呼び出されたときにリレーションを再初期化し、リレーションの代わりにリターンを返す必要があります。これが動作しないとnil
はまだ返される場合を除き
def relevance
self[:relevance] = User::Relevance.new if self[:relevance].nil?
self[:relevance]
end
:だからクラスUser
に、我々はこれを持っているでしょう。私もupdate_attribute(User::Relevance.new)
とself.create_relevance
と同じように試しましたが、常にnil
が返されるようです。ここからどこへ行くべきかわからず、アイデアが大好きです。また、役に立つと思われるコードや例を提供することもできます。
追加詳細:
- 私たちは、データベースのmongoidを使用しています。
relevance
に影響する他のコールバックはありません。代わりに、コールバックでの関連付けを設定するので、あなたはgetterメソッドでrelevance
を構築しようとするかもしれ
これは完全に動作します、私は 'autobuild'パラメータを認識していませんでした。私たちは実際にはコールバックを少し違っていますが、あなたは完全に正しいです。私は物事を短縮するときに壊しました。本当に感謝しますが、ありがとう! –