vendredi 5 juin 2015

NoMethodError when trying to print an associated table's data

I'm having trouble with my index.html.erb file.

By the way, @events = Event.all

15 <% @events.each do |event| %>
16   <tr>
17     <td><%= event.name %></td>
18     <td><%= event.maker_id %></td>
19     <td><%= event.maker.name %></td>
20     <td><%= event.category_id %></td>
21     <td><%= event.category.kind%></td>       #error
22     <td><%= event.location_id %></td>
23     <td><%= event.location.area %></td>
24     <td><%= event.description %></td>
25   </tr>
26 <% end %>

My Event table is associated with (has the foreign_keys of) my Maker, Category, and Location tables.

If event.maker.name works and prints the name of the associated Maker, how come the same logic/syntax doesn't happen with event.category.kind and event.location.area?

Instead, I receive:

NoMethodError in Events#index

Showing /Users/-/app/views/events/index.html.erb where line #21 raised:

undefined method `category' for # Event:0x007fb4c5b0f960

...where line #21 is event.category.kind

My schema.rb is:

create_table "categories", force: :cascade do |t|
  t.string   "kind"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

create_table "events", force: :cascade do |t|
  t.string   "name"
  t.string   "category_id"
  t.text     "description"
  t.string   "maker_id"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "location_id"
end

create_table "locations", force: :cascade do |t|
  t.string   "area"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

create_table "makers", force: :cascade do |t|
  t.string   "name"
  t.string   "password"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "password_digest"
end

Basically I want to output data from the associated tables, not the foreign_key id numbers themselves. Like this:

1 <% @events.each do |event| %>
2   <tr>
3     <td><%= event.name %></td>
4     <td><%= event.maker.name %></td>
5     <td><%= event.category.kind %></td>     #this would be an ERROR
6     <td><%= event.location.area %></td>     #this would be an ERROR
7     <td><%= event.description %></td>
8   </tr>
9 <% end %>

Aucun commentaire:

Enregistrer un commentaire