我有两种模式:
Answers:
belongs_to: user
User:
has_many: answers
Ruby或Rails中是否有办法一次性执行以下操作,而不是创建数组并将所需对象推入其中?
def top_experts
answers = Answer.where(some constraints)
users = []
answers.each do |answer|
users << answer.user
end
users
end
答案 0 :(得分:1)
您可以使用joins
def top_experts
Answer.where(some constraints).includes(:user).collect{|x| x.user}
# Will return an Array of users
end
修改强>
使用includes
进行预先加载。它将减少为获取用户而执行的查询次数。
答案 1 :(得分:0)
您可以使用select子句选择与where子句一起返回的内容
Vote.select(user_id).where(一些约束)
答案 2 :(得分:0)
使用子查询来获取用户:
User.where( :id => Answer.where(some constraints).select(:user_id) )