我有一个has_many关系中的两个模型,以便Log has_many Items.然后,Rails很好地设置了以下内容:some_log.items将所有相关项返回给some_log.如果我想根据Items模型中的不同字段来订购这些项目,有没有办法通过类似的结构来实现,或者必须分解为:
Item.find_by_log_id(:all,some_log.id => "some_col DESC")
Gre*_*ell 75
有多种方法可以做到这一点:
如果您希望以该方式对该关联的所有调用进行排序,则可以在创建关联时指定顺序,如下所示:
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
如果您始终希望默认情况下以相同的方式排序项目,则可以使用(Rails 2.3中的新建)default_scope方法,如下所示:
class Item < ActiveRecord::Base
  default_scope :order => "some_col DESC"
end
lfe*_*445 16
class Item < ActiveRecord::Base
  default_scope { order('some_col DESC') }
end
这也可以使用替代语法编写:
default_scope { order(some_col: :desc) }
| 归档时间: | 
 | 
| 查看次数: | 37082 次 | 
| 最近记录: |