如何为RailsAssociations::Preloader设置预加载范围?
How to set preload scope for Rails Associations::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"}, []))
我需要预加载具有复杂条件的模型关联。不,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"}, []))