我想知道如何加入两个不同的模型,然后通过另一个相关的模型对它们进行排序。
假设我有一个ACCOUNT,它有多个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')
您可以构建一个标准的Ruby数组,并使用数组sort method对它们进行排序。
a = Account.first
sets = Array.new
sets += a.bikes + a.cars
sets.sort! { |a, b| a.wheelable <==> b.wheelable }
我没有对此进行测试,但考虑到这种情况,我大致会对此进行测试。