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