Rails在相关模型中sorting

我has_many关系中有两个模型,这样Log has_many Items。 Rails很好地设置了这样的东西: some_log.items将所有关联的项目返回给some_log。 如果我想要根据Items模型中的不同字段来sorting这些项目,有一种方法可以通过类似的构造来实现,或者必须将其分解为:

 Item.find_by_log_id(:all,some_log.id => "some_col DESC") 

有多种方法可以做到这一点:

如果您希望以这种方式对该关联的所有呼叫进行sorting,则可以在创build关联时指定sorting,如下所示:

 class Log < ActiveRecord::Base has_many :items, :order => "some_col DESC" end 

你也可以用一个named_scope来做到这一点,这将允许任何时候都可以很容易地指定这个顺序项目被访问:

 class Item < ActiveRecord::Base named_scope :ordered, :order => "some_col DESC" end class Log < ActiveRecord::Base has_many :items end log.items # uses the default ordering log.items.ordered # uses the "some_col DESC" ordering 

如果你总是希望项目默认以相同的方式sorting,你可以使用(new in Rails 2.3)的default_scope方法,如下所示:

 class Item < ActiveRecord::Base default_scope :order => "some_col DESC" end 

rails 4.2.20语法需要调用块:

 class Item < ActiveRecord::Base default_scope { order('some_col DESC') } end 

这也可以用另一种语法来编写:

 default_scope { order(some_col: :desc) } 

这些都应该工作:

 Item.all(:conditions => {:log_id => some_log.id}, :order => "some_col DESC") some_log.items.all(:order => "some_col DESC") 

在你的模型类中设置default_scope

 class Item < ActiveRecord::Base default_scope :order => "some_col DESC" end 

这将工作