如何为Rails Association :: Preloader设置预加载范围?

我需要预先加载模型与复杂条件的关联。 不, 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 ? 我如何使用它来过滤关联? 谢谢!

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"}, []))