2010-11-05 7 views
1

Comment utiliser une association nommée dans la clause where associée à une jointure?ActiveRecord :: Relation ne peut pas utiliser l'association nommée dans la clause where de la jointure

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 

génère:

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

Notez que la WHERE clause est à la recherche dans le tableau dogs au lieu de la table pets

Pour référence:

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

Répondre

1

Il ap pears c'est le comportement attendu - vous devez spécifier le nom de la table dans le hachage, pas le nom de l'association. C'est un peu dommage car je pense qu'il serait utile de construire des requêtes basées davantage sur la définition de leur modèle et moins sur le schéma sur lequel elles sont placées devant.

Questions connexes