6

如果我有一个具有属性 X 的模型 A 和一个名为 B 且具有属性 Y 的 A 子模型,我如何按 Y 和 X 对 A 的所有实例进行排序?

4

2 回答 2

10

您可以使用default_scope通过关联对所有模型实例进行排序。您只需将关联的模型名称传递给:includes参数并调整您的订单参数:

default_scope :include => 'record', :order => 'records.attribute'

但是,default_scope并不强烈推荐。一种更简洁的方法是在您的父模型中创建一个可以从控制器调用的类方法:

def self.all_ordered_by_child
   includes(:records).order('records.attribute DESC')
end

您只需要更新从父模型调用所有记录的所有实例。

于 2012-08-28T17:29:39.823 回答
2

我将改用小写字母:

a_instances.sort_by{|a| [a.b.y, a.x]}
于 2012-08-28T17:05:45.490 回答