2010-11-05 35 views
1

如何在與連接關聯的where子句中使用命名關聯?ActiveRecord ::關係不能在連接的where子句中使用命名關聯

class Pet < ActiveRecord::Base 
    belongs_to :owner 
end 

class Owner < ActiveRecord::Base 
    has_many :dogs, :class_name => 'Pet', :foreign_key => :owner_id 
end 


Owner.joins(:dogs).where(:dogs => {:name => 'fido'}).to_sql 

產生:

"SELECT `owners`.* FROM `owners` INNER JOIN `pets` ON `pets`.`owner_id` = `owners`.`id` WHERE (`dogs`.`name` = 'fido')" 

注意,WHERE子句看在dogs表代替pets

的參考:

http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

回答

1

它AP梨這是預期的行爲 - 你需要在散列中指定表名,而不是關聯名。這有點不幸,因爲我認爲這將有助於更多地基於他們的模型定義構建查詢,並減少他們坐在前面的模式。

相關問題