Ruby on rails 是否有一种更简单的方法返回ActiveRecord结果集的归属关系?

Ruby on rails 是否有一种更简单的方法返回ActiveRecord结果集的归属关系?,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Ruby On Rails 4,我有两种型号: Answers: belongs_to: user User: has_many: answers 在Ruby或Rails中,有没有一种方法可以一次性完成以下工作,而不是创建一个数组并将所需的对象推入其中 def top_experts answers = Answer.where(some constraints) users = [] answers.each do |answer| users << answ

我有两种型号:

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
def顶级专家
答案=答案。其中(一些限制)
用户=[]
回答。每个人都回答|

用户您可以使用用户
加入

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


使用
包含
进行快速加载。它将减少为获取用户而执行的查询数量。

您好,您可以使用select子句来选择应与where子句一起返回的内容

投票。选择(用户id)。其中(一些限制)


使用子查询获取用户:

User.where( :id => Answer.where(some constraints).select(:user_id) )

请参阅:

我不需要加入——rails模型关系已经为每个投票对象提供了
vote.user
。。。只需要一种方法来返回仅由用户而非投票组成的活动记录结果集。我知道,但您可以使用
投票。user
仅用于实例或对象,但是在你的问题中,你指定了类
Vote
,在这个类中,你只能使用
joins
来检索关联,这对于
包括
急切加载是非常棒的!谢谢也许有更好的方法可以做到这一点。首先,您需要决定一个
用户
是否有资格成为
顶级用户
。那么,这个查询实际上应该在
用户
模型上执行,而不是在
投票
模型上执行。@zeantsoi谢谢!事实证明,这比我想象的要复杂得多——我错误地使用了错误的模型,将用户定性为顶级专家。事实证明,我需要把用户的问题和答案张贴出来,并统计他们的投票。这很公平。。。想重新表述这个问题吗?刚刚更新了这个问题。。。我这里缺少的更多的是Ruby知识。创建数组并将所需的对象推入其中以返回似乎效率低下。