ここに概説したように:なぜinverse_ofを使用したくないのですか?
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
inverse_ofは、メモリ団体にキャッシュとデータベースのクエリを最小限に抑えるためのRailsを伝えるために表示されます。彼らの例がある:彼らはすぐに従う
class Dungeon < ActiveRecord::Base
has_many :traps, :inverse_of => :dungeon
has_one :evil_wizard, :inverse_of => :dungeon
end
class Trap < ActiveRecord::Base
belongs_to :dungeon, :inverse_of => :traps
end
:
for `belongs_to` associations `has_many` inverse associations are ignored.
だから私はいくつかの質問を持っています。
has_many
の逆アソシエーションは、belongs_to
で無視されますか?もしそうなら、その例はどのように意味がありますか?何もしないでください。.dungeon
への最後の呼び出しが全体の新しいクエリを生成し、単にのために達していないとdungeon.traps.first.dungeon
:
私の知る限り(それは何もしないと仮定して)すべてこれを行うことを可能にするようなものですメモリ関連で。それが正しいと仮定すると、なぜ私はその行動を望んでいないでしょうか?なぜ私はすべての関連付けに
inverse_of:
を貼っていませんか?
ので、それは私が10(代わりにD.LEVELの= 10)= t.dungeon.levelを言っていた場合、そのD.LEVELも更新されませんでしたことを意味していそれが無視されたのでinverse_ofを設定すると?一般的に、コレクションのメンバーを更新すると、そのメンバーの他のインスタンスには同期されません。しかし、少なくともそれが最終的にそれをサポートしてくれることを期待して、inverse_ofをどこに置いても問題は生じないようです。 – bdwain
@bdwainこれはRailsが自動的に(名前が一致した場合に)この 'inverse_of'関係を自動的に推測すると思っていたので、これは非常に面白いです。最近(これに関連するモデルの 'accepts_nested_attributes_for'というモデルの検証を行っている間に)これに着手した後、私はあなたの結論に同意する必要があります:' inverse_of'を惜しみなく使ってください。私は何か理由を想像することはできません。 – steve