尝试打印关联 table 的数据时出现 NoMethodError
NoMethodError when trying to print an associated table's data
我的 index.html.erb 文件有问题。
顺便说一句,@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 %>
我的 Event table 与我的 Maker、类别,以及位置 tables.
如果 event.maker.name 工作并打印关联制造商的名称,为什么 不会发生相同的 logic/syntax event.category.kind 和 event.location.area?
相反,我收到:
NoMethodError in Events#index
Showing /Users/-/app/views/events/index.html.erb where line #21 raised:
undefined method `category' for # Event:0x007fb4c5b0f960
...第 21 行是 event.category.kind
我的schema.rb是:
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
基本上我想从关联的 table 输出数据,而不是 foreign_key id 号码本身。像这样:
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 %>
看看你的模型。 maker.rb
可能有行 has_one :event
,event.rb
有类似 belongs_to :maker
的东西,但 category.rb
与 event.rb
没有这种互惠关系。
编辑 event.rb 以包括:
belongs_to :category
编辑 category.rb 以包括:
has_one :event
为了轻松地从一个对象引用另一个对象,您必须指定它们之间的关系(在两个方向上)。
event.rb
belongs_to :location
belongs_to :category
在视图中,您应该将其命名为
<% @events.each do |event| %>
<tr>
<td><%= event.name %></td>
<td><%= event.maker_id %></td>
<td><%= event.try(:maker).try(:name) %></td>
<td><%= event.category_id %></td>
<td><%= event.try(:category).try(:kind) %></td> #error
<td><%= event.location_id %></td>
<td><%= event.try(:location).try(:area) %></td>
<td><%= event.description %></td>
</tr>
<% end %>
我的 index.html.erb 文件有问题。
顺便说一句,@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 %>
我的 Event table 与我的 Maker、类别,以及位置 tables.
如果 event.maker.name 工作并打印关联制造商的名称,为什么 不会发生相同的 logic/syntax event.category.kind 和 event.location.area?
相反,我收到:
NoMethodError in Events#index
Showing /Users/-/app/views/events/index.html.erb where line #21 raised:
undefined method `category' for # Event:0x007fb4c5b0f960
...第 21 行是 event.category.kind
我的schema.rb是:
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
基本上我想从关联的 table 输出数据,而不是 foreign_key id 号码本身。像这样:
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 %>
看看你的模型。 maker.rb
可能有行 has_one :event
,event.rb
有类似 belongs_to :maker
的东西,但 category.rb
与 event.rb
没有这种互惠关系。
编辑 event.rb 以包括:
belongs_to :category
编辑 category.rb 以包括:
has_one :event
为了轻松地从一个对象引用另一个对象,您必须指定它们之间的关系(在两个方向上)。
event.rb
belongs_to :location
belongs_to :category
在视图中,您应该将其命名为
<% @events.each do |event| %>
<tr>
<td><%= event.name %></td>
<td><%= event.maker_id %></td>
<td><%= event.try(:maker).try(:name) %></td>
<td><%= event.category_id %></td>
<td><%= event.try(:category).try(:kind) %></td> #error
<td><%= event.location_id %></td>
<td><%= event.try(:location).try(:area) %></td>
<td><%= event.description %></td>
</tr>
<% end %>