#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)
.