有没有更简单的方法来返回ActiveRecord结果集的belongs_to关系?

时间:2014-01-07 06:24:06

标签: 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 << answer.user
    end
    users
end

3 个答案:

答案 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) )

参考:subqueries in activerecord