ril*_*ley 6 activerecord ruby-on-rails eager-loading
我在Rails中有许多自定义的find_by_sql查询.我想用它们急切加载,但似乎没有一个好方法来做到这一点.
我已经看到eager_custom.rb文件浮动,现在它似乎不适用于Rails.看起来Rails现在急切地加载,使用2个查询(常规查询加上查询,其中'id IN'来自第一个查询的ID),而不是过去使用的单个连接查询.
我的问题是,如果我执行自定义SQL查询,然后执行'id IN'查询,有没有办法将关联对象添加回初始查询结果?
例如,我有使用find_by_sql加载的主题,然后我找到主题ID在主题ID中的主题图像,有没有办法手动将图像添加回主题?
谢谢
Ale*_*ner 10
正如您所注意到的,在Rails 2.1中引入了一种新的eager/pre-loading,它使用了多个查询id IN (...).此方法通常更快,尤其是在预加载多个关联时.您可以使用从ActiveRecord继承find_by_sql的preload_associations类方法手动使用此功能(不推荐).例如:
class Person
def self.find_a_special_group
people = find_by_sql("...")
preload_associations(people, [:jobs, :addresses])
return people
end
end
Run Code Online (Sandbox Code Playgroud)
该preload_associations方法受到保护,因此您必须从类中调用它,它需要(1)一个对象数组,(2)一个数组,哈希或关联符号(格式与find's :include选项相同),以及(3) )一个选项哈希.有关更多详细信息,请参阅ActiveRecord :: AssociationPreload :: ClassMethods模块的文档.
但是,尽管如此,这种技术肯定是不受欢迎的,因为Rails文档不鼓励程序员preload_associations直接使用.你确定要使用find_by_sql吗?你确定你知道所有的选择find吗?(:select,:from,:joins,:group,:having,等),我不是说你并不需要find_by_sql,但它可能是值得几分钟,以确保.
| 归档时间: |
|
| 查看次数: |
2478 次 |
| 最近记录: |