ActiveRecord:find_by_sql并包含

Tsu*_*oka 4 sql activerecord ruby-on-rails

我想使用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,...) .
Run Code Online (Sandbox Code Playgroud)

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

gmc*_*ton 7

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

预紧协会与的find_by_sqlAREL模仿与包括的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])
Run Code Online (Sandbox Code Playgroud)