按协会排序

时间:2010-06-19 01:30:50

标签: ruby-on-rails

以下是我的模特。

Restaurant has many patrons
patrons have many transactions

在控制器索引中,所有顾客都喜欢

@pts = Restaurant.find(1).patrons

并且在视图中我只列出了顾客属性,包括每个顾客的交易数量,如

我如何按每个顾客的交易计数订购结果集(@pts)?

由于

2 个答案:

答案 0 :(得分:0)

假设你没有太多的顾客并且你没有使用计数缓存(transactions_counter),你可以这样做:

@pt.sort_by{|p|p.transactions.count}.each do |patron|
...

或者你可以设置一个计数器缓存并在sql中执行(你可以在没有但查询更麻烦的情况下完成)

将transactions_counter添加到顾客表和

class Patron < ActiveRecord::Base
  has_many :transactions, :counter_cache => true
  #...
end

然后您可以在查询中按其排序:

@pts = Restaurant.find(1).patrons.all :order => "patrons.transactions_counter DESC"

您甚至可以将其添加到has_many调用中并简化操作。

答案 1 :(得分:-1)

这将按ID排序。    把它放在模型中。

  has_many :patrons, :order => "id DESC"