1

2つの異なるモデルを結合して、関連する別のモデルで並べ替える方法を考えています。

たとえば、has_many CARSとBIKESのアカウントがあり、どちらもWHEELSETとポリモーフィックな関係(has_one)を持っているとします。

特定のアカウントのすべてのバイクと車を選択し、ホイールセット(またはホイールセットモデルの別の列)で並べ替えるクエリを作成するにはどうすればよいですか?

Account
has_many :cars, :bikes

Bike
belongs_to :account
has_one wheelset, :as => wheelable

Car
belongs_to :account
has_one wheelset, :as => wheelable

Wheelset
belongs_to :wheelable, :polymorphic => true

私は次のようなことを考えています(残念ながら機能しません)

a = Account.first
sets = a.bikes.includes(:wheelset) + self.cars.includes(:wheelset)
sets.order('wheelset.wheels ASC')
4

1 に答える 1

3

標準の Ruby 配列を作成し、配列の並べ替えメソッドを使用して並べ替えることができます。

a = Account.first
sets = Array.new
sets += a.bikes + a.cars
sets.sort! { |a, b| a.wheelable <==> b.wheelable }

私はこれをテストしていませんが、この状況を考えると、大まかにどのように対処するかです。

于 2012-05-13T18:16:52.827 に答える