【发布时间】:2014-08-09 10:21:40
【问题描述】:
我有一个Deal 模型has_many :clicks。我想对一些交易进行排序:
@deals = current_user.deals
他们有多少clicks。我怎样才能做到这一点? Click 当然有 deal_id 字段。
【问题讨论】:
标签: ruby-on-rails ruby
我有一个Deal 模型has_many :clicks。我想对一些交易进行排序:
@deals = current_user.deals
他们有多少clicks。我怎样才能做到这一点? Click 当然有 deal_id 字段。
【问题讨论】:
标签: ruby-on-rails ruby
这可能是作用域的主要候选者。你可以在 Deals.rb 中做这样的事情:
scope :sorted, -> { sort_by(:clicks_count) }
然后您可以调用:
Deals.sorted OR current_user.deals.sorted
如果您无论如何都想对该字段进行排序,您甚至可以使用默认范围:
default_scope, -> { sort_by(:clicks_count) }
【讨论】:
我会在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)
【讨论】: