2011-02-06 2 views
4

Я получаю эту ошибкуНеоднозначного столбца в MySQL/Rails найти метод

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

при использовании метод поиска, как, например: self.prompts.find(:all, :select => 'id')

Этих моделей называют использование has_many: через ассоциацию, так MySQL жалуется, что существует несколько столбцов «id», так как все три таблицы, которые используются, имеют столбец «id».

Я посмотрел этот вопрос и понял, что происходит с ошибкой на конце SQL, но не знаю, как его разрешить в методе поиска ActiveRecord, и я не уверен в своих способностях SQL, чтобы попробовать запустить собственный SQL-запрос запрос. Есть ли способ массажа метода находки во что-то, что будет хорошо играть?

редактировать

Вот соответствующий Actor код модели:

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

ответ

7

Вы должны быть более явным, о котором идентификатор вы хотите выбрать. Например:

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

Хм, хорошо, что избавились от «неоднозначной» ошибки, но теперь он жалуется на 'Unknown колонке«decisions.actor_id»в«где clause'' Вероятно, потому что есть два вложенных has_many: через ассоциации, в которых он действует. – John

+0

Я догадываюсь, что остальная часть вашей настройки неверна. Прочтите документацию по has_many и иностранным и основным ключам. Он должен помочь вам в настройке. Если имена таблиц и имена столбцов не соответствуют соглашениям Rails, тогда все может стать трудным, но не невозможным. –

+0

Позаботился об этом, используя некоторые советы, размещенные здесь: [http://railsforum.com/viewtopic.php?id=10890](http://railsforum.com/viewtopic.php?id=10890) Кажется, работает нормально Теперь. Большое спасибо. – John

Смежные вопросы