2017-02-27 15 views
1

現在、私は私のモデルを持っている:のActiveRecord - 同じテーブルから2つの団体が順番

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 

現在、私は飛行機でのみ注文できます。

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

2番目の関連付けによって注文する方法はありますか?

答えて

2

別の外部キーを使用して同じテーブルを2回結合すると、ActiveRecordは先に進み、最初のテーブル以外のすべてのエイリアスを行います。したがって、flying_airlineのリレーションをSQLでairlinesと参照することはできますが、これは残りの部分では機能しません。

作成されるエイリアスは、結合するテーブルの複数クラス名の前に結合するAR関係の複数形の名前(home_airlines)です(route_pairs)。この場合、エイリアスはhome_airlines_route_pairsになります。

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

両方の団体で注文する:ActiveRecordのはにあなたのコードを変換SQLを表示するには

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

、あなたは常にあなたのクエリに.to_sqlを実行することができます!

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

これは役に立ちました、ありがとうございました! –

+0

しかし、それは私の仕様でPGのエラーが発生している。 'PG :: UndefinedTable:ERROR:テーブル" home_airlines_commission_rates "' xml-slayer –

+0

のFROM句のエントリがありません'commission_rates 'はどこから来ましたか? –

関連する問題