私はモデルを持っており、性能上の理由から関連するオブジェクトのid(非正規化)を保存したいと考えています。関連するオブジェクトの一部が新しいレコードであるかもしれないので、彼らがidを持っていない - しかし、問題があり、関連するオブジェクトがすべて保存された後のアクティブレコード - コールバック
def cache_ids
self._tag_ids = self.tag_ids
end
私はちょうどbefore_save上でそれを実行すると考えていた:私はこのようになります方法を持っています。
私はafter_saveに切り替えましたが、トランザクションがコミットされる前にこのコールバックがトリガーされているように見えるため、IDはまだ設定されていません。私が終わった瞬間に
:
def save_with_idcache(*args)
return false unless save_without_idcache(*args)
cache_ids
return save_without_idcache(false)
end
alias_method_chain :save, :idcache
動作するようですが、非常にエレガントに見えるしません。
もっと良い方法がありますか?同様に、オブジェクトと関連オブジェクトがすべて保存された後のコールバック?
多分私は何かが明らかでない。
あなたがしようとしていることは100%ではありませんが、私には少しのにおいがします。関連する要素のIDを取得することは、単一の問い合わせによって行うことができます...? –
私はTobyに同意します。関連するオブジェクトやIDを単一のクエリで取り戻すことができます。それらをキャッシュするドライバは何ですか? – RichH