假设我有一个名为Topic的模型。主题has_many :topic_flags ( TopicFlag用于表示已标记为不适当的内容)。我的问题是:如何选择具有最多标志的主题(限制为任意数量,降序)?我已经考虑了一段时间了,虽然我可以将SQL查询组合在一起,但我更喜欢找到一种更多的Rails方法来完成这项工作。
发布于 2010-07-25 05:57:54
class Topic < ActiveRecord::Base
  has_many :topic_flags
  named_scope :most_flags, lambda {|min_flags| {:joins => :topic_flags, 
                                                :group => "topic_flags.topic_id", 
                                                :order => "count(topic_flags.topic_id) desc", 
                                                :having => ["count(topic_flags.topic_id) >= ?", min_flags] }}
end这使用了一个内部连接,所以它不会拾取没有标志的主题。你可以这样称呼它。
Topic.most_flags(3)  # returns a sorted list of all topics with at least 3 flags.https://stackoverflow.com/questions/3326986
复制相似问题