我有一个Deal
模型has_many :clicks
。我想对一些交易进行排序:
@deals = current_user.deals
他们有多少clicks
。我怎样才能做到这一点? Click
当然有deal_id
字段。
答案 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)