1

我想知道如何连接两个不同的模型,然后通过另一个关联模型对它们进行排序。

假设我有一个帐户,它有多个 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 回答