18

OK、私は熱心な読み込みのいくつかで遊んでいて、次のような 2 つのモデルがあります。

Class Recipe < ActiveRecord::Base
    belongs_to :cookbook
    has_many   :recipetags
end

Class Cookbook < ActiveRecord::Base
    has_many :recipes, :include => [:recipetags]
end

クックブックを見つけたら、レシピを熱心に読み込み、次にレシピが :recipetags を熱心に読み込みます。

cb = Cookbook.find(10590, :include => [:recipes])

しかし、私がやりたいことは、レシピを開くたびに、すべての熱心な関連付けを自動的に取り込むことです-基本的に私はやりたいです:

rec = Recipe.find(123)

その場合も :recipetags を熱心にロードします。

これは些細なことのように思えますが、実際には Recipe に約 4 ~ 5 個の関連付けがあります。ここではそれらを表示していません。すべての find 呼び出しで :include を明示的に実行する必要はありません。 . 私は Recipe.find をオーバーライドして Recipe モデルでそれを行うことができると仮定していますが、よりクリーンな方法があるかどうか疑問に思っていました....

4

2 に答える 2

33

私は常に熱心にロードしたい選択されたモデルでそれを行うために default_scope を使用してきました:

class Post < ActiveRecord::Base
  has_many :comments
  default_scope :include => :comments, :order => ["title ASC"]
  ...
end
于 2010-01-11T15:17:42.710 に答える
0

名前付きスコープでこれを行うことができるはずですが、それには多くのバグの可能性があることを理解しています。うまくいけば、それらはすべて修正されています。

于 2010-01-11T15:10:25.077 に答える