说你有这个:
class Question < ActiveRecord::Base
has_many :answers
end
class Answer < ActiveRecord::Base
belongs_to :question
end
如何在不重复提问的情况下搜索所有有答案的问题?
如果您这样做,请说一个问题有两个答案:
Question.joins(:answers)
因为它是一个内部联接,你会多次得到这个问题。
有没有办法通过查询接口执行此操作,而无需执行原始sql不同或唯一?
答案 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