2016-10-02 14 views
2

私はActiveRecordがこれをどのように処理しているのか混乱しています。多態的な関係の混乱

私は多相関係を持つテーブルを持っています。テーブルの選択肢と呼ぶことにします。そこに私は定義した:

belongs_to :chooseable, polymorphic: true 

私は2つのモデルを持っている、1つの映画を呼び出すと、他の演劇。そこでは、私が持っている:私はusers.choices.with_moviesを言うと、私は去るならば、私に混乱して何

scope :with_movies, -> { 
    includes(:movies) 
     .where("chooseable_type": "Measure") 
    } 
    scope :with_shows, -> { 
    includes(:shows) 
     .where(shows: { hidden: false }) 
    } 

される:ポリモーフィックな関係を持つモデルではhas_many :choices as: chooseable, dependent: destroy

は、私は2つのスコープを持っています条件は、ARは私をbalksと言うchooseable_typeアウト:

Unknown column 'choices.chooseable_type' in 'where clause': SELECT `movies`.* FROM `movies` WHERE `choices`.`chooseable_type` = 'Movie' AND `movies`.`id` IN (728) 

はまだ、二スコープwith_showsに、私はchooseable_typeを定義する必要はありません - それが正常に動作します。さらに紛らわしいことは、where節を削除すると、with_showsもうまくいきません。

2番目のスコープのwhere句が適切なクエリを生成できる理由を理解できていません。

答えて

0

問題はRailsが、それはあなたのために結果の複雑なクエリを構築するのが最善です行おうとということです、そして、それはこのクエリのメインテーブルで最高の仮定、だとそれは

.where("chooseable_type": "Measure") 

を解決します。

.where("movies.chooseable_type": "Measure") 
+0

他のスコープには、showsテーブルのwhere句があるため、showテーブルにはchooseable_type句が適用されていることがわかります。明示的にそれに伝える?それは私にとってとても奇妙です。 – Siraris

+0

'puts with_shows.to_sql'を実行して、作成されたクエリを見てください。 – mudasobwa

関連する問題