Ruby On Rails:按子属性排序

时间:2012-08-28 17:01:47

标签: ruby-on-rails

如果我有一个具有属性X的模型A和一个名为B的子模型,其属性为Y,那么如何通过Y和X订购A的所有实例?

2 个答案:

答案 0 :(得分:7)

您可以使用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

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

答案 1 :(得分:3)

我将改用小写字母:

a_instances.sort_by{|a| [a.b.y, a.x]}