Cam*_*oni 18 ruby-on-rails eager-loading
好吧,我一直在玩一些急切的装载东西,并有两个模型类似于:
Class Recipe < ActiveRecord::Base
belongs_to :cookbook
has_many :recipetags
end
Run Code Online (Sandbox Code Playgroud)
和
Class Cookbook < ActiveRecord::Base
has_many :recipes, :include => [:recipetags]
end
Run Code Online (Sandbox Code Playgroud)
哪个好,当我找到一本食谱时,我急切地加载食谱,然后食谱急切加载:recipetags:
cb = Cookbook.find(10590, :include => [:recipes])
Run Code Online (Sandbox Code Playgroud)
但我想要做的就是每当我打开食谱时,让它自动引入所有热切的关联 - 基本上我想这样做:
rec = Recipe.find(123)
Run Code Online (Sandbox Code Playgroud)
并且在这种情况下急于加载:recipetags.
我意识到这似乎是微不足道的,但实际上我在Recipe上有大约4-5个关联,我只是没有在这里显示它们,而不是必须明确地执行:包含在每个查找调用我希望它发生.我假设我可以覆盖Recipe.find在Recipe模型中执行它,但是想知道是否有更清洁的方式....
Dan*_*vin 33
我一直在使用default_scope在我总是想要加载的选定模型上执行此操作:
class Post < ActiveRecord::Base
has_many :comments
default_scope :include => :comments, :order => ["title ASC"]
...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5340 次 |
| 最近记录: |