6

属性Xを持つモデルAと、属性Yを持つBというAの子モデルがある場合、AのすべてのインスタンスをYとXで並べ替えるにはどうすればよいですか?

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 に答える