1

我的应用程序中有以下类:

class Prompt
  has_many :entries
end

class Entry
  belongs_to :prompt
  belongs_to :user

  def self.approved
    where("is_approved")
  end
end

class User
  has_many :entries
end

我想显示给定提示的所有“已批准”条目的表格以及他们的用户belong_to。要生成此列表,我执行以下查询:

prompt = Prompt.find(prompt_id, :include => {:entries => :user})

但是当我运行以下循环时,它会为每个用户进行查询,而不是使用预取的用户

prompt.entries.approved.each do |entry|
   puts entry.user.id
end

我该如何重写它,以便它不会对循环的每次迭代进行查询?

4

1 回答 1

0

它对每个用户进行查询,因为entries.approved正在为每个条目调用查询 *where('is_approved')*。您的 find 语句只是提取所有提示并创建可以访问其子属性的对象。我认为您需要的是一个 where 语句,它选择所有具有属性“is_approved”的条目,然后通过循环打印它们的 id。

也许尝试类似 @entries = Entry.where(is_approved: true).includes(entries: user) )

然后

entry.user.each 做 |user| 将 user.id 放在末尾

希望那有帮助。

于 2013-04-20T00:15:50.913 回答