我有两个模型在一个has_许多关系中,因此Log有许多项.然后Rails很好地设置了:some_log.items
,它将所有相关项返回到某个日志(log).如果我想根据项目模型中的不同字段来订购这些项目,有没有一种方法可以通过类似的构造来实现,或者必须分解为以下内容:
Item.find_by_log_id(:all,some_log.id => "some_col DESC")
我有两个模型在一个has_许多关系中,因此Log有许多项.然后Rails很好地设置了:some_log.items
,它将所有相关项返回到某个日志(log).如果我想根据项目模型中的不同字段来订购这些项目,有没有一种方法可以通过类似的构造来实现,或者必须分解为以下内容:
Item.find_by_log_id(:all,some_log.id => "some_col DESC")
有多种方法可以做到这一点:
如果希望以这种方式对该关联的所有调用进行排序,可以在创建关联时指定排序,如下所示:
class Log < ActiveRecord::Base
has_many :items, :order => "some_col DESC"
end
您还可以使用一个命名的_范围来实现这一点,这将允许在任何时候访问项时轻松指定排序:
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
如果您总是希望在默认情况下以相同的方式订购项目,则可以使用(Rails 2.3中新增的)default_scope方法,如下所示:
class Item < ActiveRecord::Base
default_scope :order => "some_col DESC"
end