14

ここで概説したように:

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.

そこでいくつか質問があります。

  1. の逆関連付けは無視されhas_manyますbelongs_toか? もしそうなら、彼らの例はどのように理にかなっていますか? 何もしなくてもいいのではないですか?
  2. 私が知る限り(それが何でもできると仮定して)これができることはすべて次のようなものです:

    dungeon.traps.first.dungeon
    

    .dungeon新しいクエリ全体を生成するのではなく、メモリ内の関連付けに到達するだけです。それが正しいと仮定すると、なぜ私はその振る舞いを望まないのでしょうか? なぜ私はinverse_of:すべての関連付けに固執しないのですか?

4

2 に答える 2

4

素晴らしいニュース!Rails 4.1 では、基本的な関連付け* が自動的にセットアップされinverse_ofます。

*利便性が高いということは、エッジ ケースが多いことを意味します...自動 inverse_ofは、次のオプションのいずれも指定されていない関連付けに対してのみ機能します。

  • :through
  • :foreign_key
  • :conditions
  • :polymorphic

資力:

http://edgeguides.rubyonrails.org/4_1_release_notes.html http://wangjohn.github.io/activerecord/rails/associations/2013/08/14/automatic-inverse-of.html

于 2014-07-11T18:48:14.160 に答える