我的申请中有以下课程:
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
如何重写它以便它不会对循环的每次迭代进行查询?
答案 0 :(得分:0)
它为每个用户执行查询,因为 entries.approved 正在为每个条目调用查询* where('is_approved')*。您的查找语句仅仅是提取所有提示并创建可以访问其子属性的对象。我认为你需要的是一个where语句,它选择所有具有'is_approved'属性的条目,然后通过循环打印它们的id。
也许尝试像@entries = Entry.where(is_approved:true).includes(entries:user))
然后
entries.user.each do | user | put user.id 端
希望这有帮助。