我有一个模型,一个关联和一个这样的范围:
class Job
has_many :items
scope :current_items, -> {includes(:items).where("items.start_at = ?", start_at).references(:items)}
end
我正在调用范围:
Job.current_items.where(....)
上面的调用返回一个空数组[],而不是返回一个包含条件的Jobs和eager加载项的集合,而不管这些项是否存在。如何加载有条件的物品?
答案 0 :(得分:0)
对于您的用例,这将执行相同的操作:
class Job
has_many :items
scope :current_items, -> { joins(:items).where(items: { start_at: start_at }) }
end
当您执行Job.current_items.where(...)
时,会创建一个单独的查询,并且不会使用您的预先加载的关联,因为Rails无法将该SQL where子句转换为某种内存中查询,从而返回急切加载的关联。 / p>
在您急切加载关联之前,您必须移动where(...)
。