Rails,按关联的模型计数排序

时间:2014-08-09 01:25:22

标签: ruby-on-rails ruby

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

@deals = current_user.deals

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

2 个答案:

答案 0 :(得分:2)

这可能是范围的主要候选者。您可以在Deals.rb中执行类似的操作:

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

然后你可以打电话:

Deals.sorted OR current_user.deals.sorted

如果您总是希望对该字段进行排序,您甚至可以使用默认范围:

default_scope, -> { sort_by(:clicks_count) }

答案 1 :(得分:1)

我会在counter_cache模型中添加Deal以避免改进数据库查询。有关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)