Ранее я спросил question о вызовах связанных атрибутов модели.Основные методы ActiveModel, не работающие над объектами
В частности, я спросил о попытке отобразить имена экземпляров модели Vip, связанных с событием.
Изначально я был
<% @organization.events.each do |event| %>
<p>
<table>
<tr>
<td>
<%= event.name %>
</td>
<td>
<%= event.vips.name %>
</td>
</tr>
</table>
</p>
<% end %>
Что я изменил
<%= event.vips.first.name %>
и он работал на некоторое время. В конце концов я скорректировал его до
<% event.vips.each do |vip| %>
<%= vip.name %>
который также работал на некоторое время. Но когда я вернулся на компьютер после перерыва, новые формы формы событий больше не отображали имя vip на странице организации, хотя база данных обновлялась внешним ключом vip_id.
На самом деле, когда я попытался
<%= event.vips.first.name %>
снова, я получил сообщение об ошибке сказав «неопределенный метод` имя»для ноль: NilClass»
Я действительно не знаю, что изменилось, или то, что Я поступаю неправильно. Поэтому любая помощь будет оценена по достоинству.
Update:
Чтобы прояснить эту проблему, я получаю следующие выходы из консоли:
irb(main):005:0> Event.first
Event Load (0.2ms) SELECT "events".* FROM "events" ORDER BY "events"."id" ASC LIMIT 1
=> #<Event id: 1, when: "2015-08-25 00:00:00", organization_id: 1, created_at: "2015-08-25 04:47:43", updated_at: "2015-08-25 04:47:43", name: "John's Event", vip_id: 1>
irb(main):006:0> Vip.first
Vip Load (0.2ms) SELECT "vips".* FROM "vips" ORDER BY "vips"."id" ASC LIMIT 1
=> #<Vip id: 1, name: "John", created_at: "2015-08-25 04:46:23", updated_at: "2015-08-25 04:46:23", organization_id: 1, event_id: nil>
irb(main):007:0> @organization
=> #<Organization id: 1, name: "Test Org", created_at: "2015-08-25 04:46:03", updated_at: "2015-08-25 04:46:03", user_id: 1>
irb(main):008:0> @organization.events.first
=> #<Event id: 1, when: "2015-08-25 00:00:00", organization_id: 1, created_at: "2015-08-25 04:47:43", updated_at: "2015-08-25 04:47:43", name: "John's Event", vip_id: 1>
irb(main):009:0> @organization.events.first.vips
Vip Load (0.2ms) SELECT "vips".* FROM "vips" WHERE "vips"."event_id" = ? [["event_id", 1]]
=> #<ActiveRecord::Associations::CollectionProxy []>
irb(main):010:0>
Привет Райан. Можете ли вы отобразить 'Event'' vips' с '<% = event.vips.inspect%>'? Что он возвращает? –
Это означает, что 'event.vips.first' является' nil' и, следовательно, является ошибкой. «Vips» против определенного «события» удаляются. – usmanali
@ Yanis Vieilly Да, это пример блока, который проходит один раз «Событие Джона \t # ", когда я использую '<% = event.vips.inspect%>' –