ActiveRecord:find_by_sql并包含

时间:2014-11-19 05:34:48

标签: sql ruby-on-rails activerecord

我想使用find_by_sql并同时包含。

我使用find_by_sql因为我在里面写了select来利用索引。 如果我使用左连接,那么如何忽略索引。

但是,find_by_sql不返回ActiveRecord_Relation但返回Array对象,所以我不能写

like Model.find_by_sql("select * from (select * from table limit 10)table left join rel_table on ...").includes(:rel_table,...) .

之后我可以运行两个查询并手动包含。 有没有办法解决它作为一个SQL?

1 个答案:

答案 0 :(得分:7)

您无法在生成的数组上调用includes,但您可以手动调用Rails预加载器来执行相同的操作。

请参阅preload associations with find_by_sqlARel mimic includes with find_by_sql

array = Model.find_by_sql("select * from ...")

# Rails 3 and 4.0.x
ActiveRecord::Associations::Preloader.new(array, [:rel_table]).run

# Rails 4.1+
ActiveRecord::Associations::Preloader.new.preload(array, [:rel_table])