Ruby On Rails:按子项排序属性

问题描述:

如果我有一个模型A有一个属性X和一个名为B的子模型,并带有一个属性Y,那么我如何通过Y和X来排序A的所有实例?Ruby On Rails:按子项排序属性

我将使用小写字母来代替:

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

谢谢,但无论如何创建一个默认范围,所以它会自动排序? – rhfannnn

可以使用default_scope通过关联下令所有的模型实例。你只要通过相关的型号名称为:includes PARAM和调整您的订单PARAM:

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

然而,default_scope不值得推荐。一个清洁的方法是建立在你的父模型类方法,你可以从你的控制器拨打:

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

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