2016-10-02 96 views
2

所以我很困惑ActiveRecord如何處理這個問題,希望有人能給我一些見解。多態關係混淆

我有一個表具有多態關係。我們將它稱爲表格選擇。在那裏我定義了:

belongs_to :chooseable, polymorphic: true 

我有兩個模型,讓我們打電話一部電影,其他的戲劇。在那裏,我有:has_many :choices as: chooseable, dependent: destroy

與多形關係模型我有兩個範圍:

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

什麼是混亂對我來說,如果我說users.choices.with_movies,和我離開在哪裏的條件,AR不太願意跟我說的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,不起作用。

我真的不明白爲什麼第二個作用域中的where子句允許生成正確的查詢,但沒有它,它落在它的表面上。

回答

0

的問題是,Rails的嘗試做到這一點,最好建立你所產生的複雜的查詢,並解決

.where("chooseable_type": "Measure") 

到它的最好的假設,這是此查詢的主表。幫助它不會失敗,顯式指定表名:

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

所以因爲其他範圍具有的節目表中的WHERE子句,它知道到chooseable_type條款適用於節目表,即使它不明確告訴它?這對我來說很奇怪。 – Siraris

+0

嘗試'puts with_shows.to_sql'來查看構建的查詢。 – mudasobwa