Rails渴望加载所有查找

时间:2010-01-11 14:48:14

标签: ruby-on-rails eager-loading

好的,我一直在玩一些急切的装载东西,并且有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个关联,我只是没有在这里显示它们,而不是必须明确地执行:包含在每个查找调用我喜欢它刚刚发生我假设我可以覆盖Recipe.find在Recipe模型中执行它,但是想知道是否有更清洁的方式....

2 个答案:

答案 0 :(得分:33)

我一直在使用default_scope在我一直想要加载的选定模型上执行此操作:

class Post < ActiveRecord::Base
  has_many :comments
  default_scope :include => :comments, :order => ["title ASC"]
  ...
end

答案 1 :(得分:0)

您应该可以使用命名范围执行此操作,但我知道存在许多可能的错误,希望它们现在都已修复。