加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails添加自定义的热切负载

发布时间:2020-12-16 23:09:26 所属栏目:百科 来源:网络整理
导读:我在Rails中有许多自定义的find_by_sql查询.我想用它们急切加载,但似乎没有一个好方法来做到这一点. 我已经看到eager_custom.rb文件浮动,现在它似乎不适用于Rails.看起来Rails现在急切地加载,使用2个查询(常规查询加上查询,其中’id IN’来自第一个查询的ID)
我在Rails中有许多自定义的find_by_sql查询.我想用它们急切加载,但似乎没有一个好方法来做到这一点.

我已经看到eager_custom.rb文件浮动,现在它似乎不适用于Rails.看起来Rails现在急切地加载,使用2个查询(常规查询加上查询,其中’id IN’来自第一个查询的ID),而不是过去使用的单个连接查询.

我的问题是,如果我执行自定义SQL查询,然后执行’id IN’查询,有没有办法将关联对象添加回初始查询结果?

例如,我有使用find_by_sql加载的主题,然后我找到主题ID在主题ID中的主题图像,有没有办法手动将图像添加回主题?

谢谢

解决方法

正如您所注意到的,在Rails 2.1中引入了一种新的急切/预加载,它使用ID为IN(…)的多个查询.此方法通常更快,尤其是在预加载多个关联时.您可以使用从ActiveRecord继承的preload_associations类方法(不推荐),使用find_by_sql手动使用此功能.例如:
class Person
  def self.find_a_special_group
    people = find_by_sql("...")
    preload_associations(people,[:jobs,:addresses])
    return people
  end
end

preload_associations方法受到保护,因此您必须从类中调用它,它需要(1)一个对象数组,(2)一个数组,哈希或关联符号(格式与find的:include选项相同),以及(3)选项哈希.有关更多详细信息,请参阅ActiveRecord :: AssociationPreload :: ClassMethods模块的文档.

但是,尽管如此,这种技术肯定是不可取的,因为Rails文档不鼓励程序员直接使用preload_associations.你确定你必须使用find_by_sql吗?你确定你知道所有选项吗? (:select,:from,:join,:group,:having等)我不是说你不需要find_by_sql,但是确定它可能值几分钟.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读