2011-02-06 1 views
4

Je reçois cette erreurcolonne Ambigu dans MySQL/Rails trouver la méthode

Mysql::Error: Column 'id' in field list is ambiguous

lors de l'utilisation d'une méthode de recherche comme par exemple: self.prompts.find(:all, :select => 'id')

Les modèles sont appelés à l'aide d'un has_many: par association, donc MySQL se plaint qu'il y a plusieurs colonnes 'id', puisque les trois tables utilisées ont une colonne 'id'. J'ai recherché et compris ce qui ne va pas du côté SQL, mais je ne sais pas comment le résoudre dans la méthode de recherche ActiveRecord, et je ne suis pas sûr de mes capacités SQL pour essayer de lancer mon propre SQL question. Y a-t-il un moyen de masser la méthode de recherche en quelque chose qui va bien jouer?

modifier

Voici le code modèle pertinent Acteur:

class Actor < ActiveRecord::Base 
    has_many :acts, :dependent => :destroy 
    has_many :decisions, :through => :acts, :order => 'created_at' 
    has_many :prompts, :through => :decisions, :order => 'id' 

Répondre

7

Vous devez être plus explicite sur l'ID que vous voulez sélectionner. Par exemple:

 
self.prompts.find(:all, :select => 'prompts.id') #prompts is the table name 
+1

Hmm, d'accord, qui se sont débarrassés de l'erreur « ambiguë », mais maintenant il se plaint de 'Unknown column « decisions.actor_id » dans « où clause'' probablement parce qu'il ya deux has_many imbriquées: grâce à des associations sur lesquelles il agit. – John

+0

Je suppose que le reste de votre configuration n'est pas correct. Lisez la documentation sur has_many et les clés étrangères et primaires. Cela devrait vous aider avec votre configuration. Si vos noms de tables et de colonnes ne suivent pas les conventions Rails, les choses peuvent devenir difficiles mais pas impossibles. –

+0

Nous avons pris soin de lui en utilisant un conseil posté ici: [http://railsforum.com/viewtopic.php?id=10890](http://railsforum.com/viewtopic.php?id=10890) Cela semble fonctionner ok à présent. Merci beaucoup. – John

Questions connexes