2017-02-27 50 views
1

目前我有在我的模型:ActiveRecord的 - 爲了通過兩個協會從同一個表

class RoutePair < ActiveRecord 
    belongs_to :flying_airline, class_name: 'Airline' 
    belongs_to :home_airline, class_name: 'Airline' 
end 

我想寫的飛行航線名稱第一預定他們的查詢,再其次是家航空公司名稱。我的預期結果將如下所示:

AirAsia Air Hong Kong 
AirAsia Eastern Air Lines 
AirAsia Cebu Pacific 
Cebu Pacific Air Hong Kong 
Cebu Pacific AirAsia 
Cebu Pacific Eastern Air Lines 

當前我只能通過flying_airline訂購。

RoutePair.joins(:flying_airline, :home_airline).order('airlines.name') 

有沒有辦法由第二協會訂購?

回答

2

當你在同一個表上連接兩次,使用不同的外鍵時,ActiveRecord繼續前進,併爲你除第一個表外的所有別名。因此,儘管您可以在SQL中引用flying_airlineairlines的關係,但這對其餘部分不起作用。

創建的別名是您正在加入的AR關係的複數名稱(home_airlines),該名稱預先加入到正在加入的表格的多元化類名稱中(route_pairs)。所以在這種情況下,別名將是home_airlines_route_pairs

RoutePair.joins(:flying_airline, :home_airline).order('home_airlines_route_pairs.name') 

要通過兩個協會的命令:

RoutePair.joins(:flying_airline, :home_airline).order('airlines.name asc, home_airlines_route_pairs.name asc') 

要查看ActiveRecord的代碼轉換成SQL,你總是可以運行在您的查詢.to_sql

RoutePair.joins(:flying_airline, :home_airline).to_sql 
+0

這很有幫助,謝謝! –

+0

但是,這在我的規範中導致了我的PG錯誤。 'PG :: UndefinedTable:錯誤:缺少表「home_airlines_commission_rates」的FROM子句條目'@ xml-slayer –

+0

'commission_rates'從哪裏來? –