2010-11-05 48 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梨这是预期的行为 - 你需要在散列中指定表名,而不是关联名。这有点不幸,因为我认为这将有助于更多地基于他们的模型定义构建查询,并减少他们坐在前面的模式。