has_many _through не работает в Rails 3 после обновления с Rails 2

#ruby-on-rails #has-many-through #rails-3-upgrade

#ruby-on-rails #имеет много сквозных #rails-3-обновление

Вопрос:

У меня в моем контроллере следующее:

 @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:

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

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

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

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

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

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

Комментарии:

1. мы можем продолжать использовать find? Я думал, что это устарело, поэтому я менял его….

2. Насколько я знаю, только find вызовы с использованием опций устарели. Например, вам больше не следует использовать find(:all, :conditions => ...) , но по-прежнему предпочтительнее находить одну запись по идентификатору find(id) .

3. Вот обзор того, что устарело