has_many _through не работает в Rails 3 после обновления с Rails 2 - PullRequest
1 голос
/ 01 июня 2011

В моем контроллере есть следующее:

@campaign = Campaign.where(:id => params[:id])
@companies = @campaign.companies.sort { |a,b| a.name <=> b.name` }

Вторая строка дает мне неизвестный метод для companies, и раньше он работал нормально.

Это в моей модели кампании:

has_many :companies, :through => :contacts, :uniq => true

Я попробовал следующее, но это все еще не помогло:

has_many :companies, :through => :contacts, :uniq => true, :source => :company

1 Ответ

2 голосов
/ 01 июня 2011
@campaign = Campaign.where(:id => params[:id])

возвращает массив результатов (вероятно, только один элемент, но все же массив). Вы получаете сообщение об ошибке «Нет метода» из-за того, что у класса Array нет метода companies.

Вы либо хотите вызвать .first в наборе результатов:

@campaign = Campaign.where(:id => params[:id]).first

Или просто используйте .find:

@campaign = Campaign.find(params[:id])
...