我有两个模型在一个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

Ruby-on-rails相关问答推荐

参数数量错误(给定1个,预期为0个;必需关键字:IO、文件名)-活动存储

包含字母和数字组合的正则表达式

Rails 7 - has_many_attached 在加载新附件时删除旧附件

Ruby 3 动态关键字参数

Rspec期望()与期望{}

您如何查看在 Rails 中触发回调的关联模型?

Restful Rails 编辑与更新

Ruby on Rails 有没有好的管理生成器?

运行多个 Rails Server 实例

对于 Visual Studio 用户来说,最好的 Ruby on Rails 环境是什么?

如何让 ActiveAdmin 使用强参数?

Rails 3 SSL 路由从 https 重定向到 http

如何在 Ruby on Rails 的内存缓存存储中列出键?

在rails中带有内部文本或html的link_to image_tag

我可以在 twitter-bootstrap popover 数据内容中使用 html 标签吗?

如何覆盖:在 has_many 中定义的顺序

Active Record has_many:通过删除一条关联记录

在 Ruby on Rails 中的控制器中获取 URL 的锚部分

向 Rails 模型添加外键

如何删除特殊字符?