18

好的,我一直在玩一些急切加载的东西,并且有 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 。

我意识到这似乎微不足道,但实际上我在食谱上有大约 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 回答