渴望加载关联范围在Rails 4中返回空数组

时间:2016-09-13 09:43:10

标签: ruby-on-rails ruby-on-rails-4

我有一个模型,一个关联和一个这样的范围:

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加载项的集合,而不管这些项是否存在。如何加载有条件的物品?

1 个答案:

答案 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(...)