【问题标题】:Rails, sort by associated model count [duplicate]Rails,按相关模型计数排序[重复]
【发布时间】:2014-08-09 10:21:40
【问题描述】:

我有一个Deal 模型has_many :clicks。我想对一些交易进行排序:

@deals = current_user.deals

他们有多少clicks。我怎样才能做到这一点? Click 当然有 deal_id 字段。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    这可能是作用域的主要候选者。你可以在 Deals.rb 中做这样的事情:

    scope :sorted, -> { sort_by(:clicks_count) }
    

    然后您可以调用:

    Deals.sorted OR current_user.deals.sorted
    

    如果您无论如何都想对该字段进行排序,您甚至可以使用默认范围:

    default_scope, -> { sort_by(:clicks_count) }
    

    【讨论】:

      【解决方案2】:

      我会在Deal 模型中添加一个counter_cache 以避免改进数据库查询。有关counter_cache 的更多信息,请参阅:http://guides.rubyonrails.org/association_basics.html#counter-cache

      不仅仅是:

      current_user.deals.order(:clicks_count)
      
      # or when deals are already loaded
      current_user.deals.sort_by(:clicks_count)
      

      【讨论】:

        猜你喜欢
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多