2013-02-11 3 views
0

У меня есть show действие в модели Exhibitor. Я хочу отобразить список Meetings, для которого Exhibitor является Sponsor.Ruby on Rails NoMethodError по вызову object.each

Exhibitor модель:

class Exhibitor < ActiveRecord::Base 
attr_accessible :description, :name, :exhibitor_category, :sponsor, :exhibitor_category_id 

validates :name, :presence => true 
validates :description, :presence => true 
validates :exhibitor_category, :presence => true 

belongs_to :exhibitor_category 
belongs_to :sponsor 
end 

show действие:

def show 
    @exhibitor = Exhibitor.find(params[:id]) 
    @sponsoredmeetings = @exhibitor.sponsor 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @exhibitor } 
    end 
    end 

show вид:

<p> 
    <b>Meetings:</b> 
    <% @sponsoredmeetings.each do |c| %> 
    <%= c.meetings %> 
    <% end %> 
    </p> 

Когда я запускаю страницу я получаю это:

NoMethodError в участников # показать

неопределенный метод `каждый» для # Rails.root: C: /RailsInstaller/Ruby1.9.3/eventmanager

Применение трассировки | Рамочная трасса | Полная Трассировка приложение/контроллеры/exhibitors_controller.rb: 17: в `шоу» Request

Параметры:

{ "ID" => "1"} Показать сессии дампа

Что же я делать неправильно на странице контроллера, чтобы получить эту ошибку?

+0

Как выглядит ваша модель экспонента? – 2013-02-11 00:28:52

+0

Вы можете добавить свою модель экспонента в свой вопрос? – jvnill

+1

У вас нет встреч внутри вашей модели. Является ли атрибут 'meeting' частью вашей таблицы экспонентов? – 2013-02-11 00:40:52

ответ

0

С вашей точки зрения, ошибка связана с @sponsoredmeetings.each.

@sponsoredmeetings имеет значение @exhibitor.sponsor и sponsor атрибута, как я могу видеть в вашей модели, это не то, что возвращение коллекции, но один объект, поэтому нет each метода для объекта, возвращаемого этого атрибутом. У вас есть belongs_to соединение с exhibitor к sponsor, поэтому одинexhibitor принадлежит только одинsponsor.

Если вы хотели бы создать один ко многим отношений, где один экспонент имеет много спонсоров, вы должны заменить

belongs_to :sponsor 

с

has_many :sponsors 

Если вы хотите отношения многие ко многим (многие exibitior у многих спонсоров и спонсоров много экспонентов), проверьте связь has_and_belongs_to_many, описанную в this question.

Конечно, если ваша схема базы данных имеет отношение ко многим, у одного спонсора есть много экспонентов (как предлагает ваша модель exhibitor), и вы хотите изменить свои модели одним из предложенных способов, не забудьте обновить отношения в базе данных.

Обязательно прочитайте больше о associations in rails.

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