ActiveRecord Query:选择记录中至少有一个具有多个关系的记录

时间:2011-07-28 16:14:10

标签: ruby-on-rails-3 activerecord

说你有这个:

class Question < ActiveRecord::Base
 has_many :answers
end

class Answer < ActiveRecord::Base
 belongs_to :question
end

如何在不重复提问的情况下搜索所有有答案的问题?

如果您这样做,请说一个问题有两个答案:

Question.joins(:answers)

因为它是一个内部联接,你会多次得到这个问题。

有没有办法通过查询接口执行此操作,而无需执行原始sql不同或唯一?

2 个答案:

答案 0 :(得分:2)

我只想使用计数器缓存列。这为questions提供了一个数据库列,用于计算附加到它的答案数。作为奖励,运行此查询可能会更快。

这是一个Railscasts视频,介绍如何创建一个:http://railscasts.com/episodes/23-counter-cache-column

然后您的查询变为:

Question.where("answers_count > 0")

您甚至可以将其定义为范围:

class Question < ActiveRecord::Base
  has_many :answers
  scope :answered, where("answers_count > 0")
end

这似乎是一个简单的解决方案,但简单就是好。

答案 1 :(得分:1)

这应该有效:

Question.joins(:answers).uniq