0

我有两个型号:有没有更简单的方法来返回ActiveRecord结果集的belongs_to关系?

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 
+1

可能有更好的方法来做到这一点。首先,您需要决定需要多少票才能将'User'限定为'top_user'。然后,这个查询应该在'User'模型上执行,而不是'Vote'模型。 – zeantsoi

+0

@zeantsoi谢谢!事实证明,这比我想象的要复杂 - 我错误地使用了错误的模型来使用户成为顶级专家。事实证明,我需要获得用户的问题和答案,然后发布他们的选票。 – Hopstream

+0

足够公平......谨慎地重述这个问题? – zeantsoi

回答

1

您可以通过用户joins

def top_experts 
    Answer.where(some constraints).includes(:user).collect{|x| x.user} 
    # Will return an Array of users 
end 

编辑:

使用includes为预先加载。它会减少为获取用户而执行的查询的数量。

+0

我不需要加入 - rails模型关系已经为每个投票对象提供了'vote.user' ......只需要一种方法来返回一个只有用户的活动记录结果集,而不是投票。 – Hopstream

+0

我知道,但你可以使用'vote.user'只与实例或对象,但在你的问题你指定类'投票',在那里你只能使用'联合'来检索关联 – shiva

+0

谢谢你的作品! – Hopstream

0

嗨,你可以使用SELECT子句选择什么应该随着where子句

Vote.select(USER_ID)。凡(一些约束上)

相关问题