我想使用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?
答案 0 :(得分:7)
您无法在生成的数组上调用includes
,但您可以手动调用Rails预加载器来执行相同的操作。
请参阅preload associations with find_by_sql和ARel 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])