我需要预先加载模型与复杂条件的关联。不,includes
对我不起作用。它为我的任务生成了错误的SQL。
我看一下ActiveRecord::Associations::Preloader
并发现他采用preload_scope
论证:
http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/Preloader/preload
def preload(records, associations, preload_scope = nil)
# ...
end
但我找不到任何使用它的例子。在这种情况下,preload_scope
是什么?我如何使用它来过滤关联?
谢谢!
答案 0 :(得分:2)
ActiveRecord不会通过关联#preloads
公开此信息:
https://github.com/rails/rails/blob/0aefa97689d001ca9a98db76bbad1bbbb0e51c9c/activerecord/lib/active_record/relation.rb#L663 - 正如您所看到的,只传递记录和关联参数。
您可以访问ActiveRecord内部并直接调用Preloader:
rows = Projects.all.to_a
ActiveRecord::Associations::Preloader.new.preload(rows, :current_task, Struct.new(:values, :bind_values).new({where: "active"}, []))