我的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.maker.name 工作并打印关联Maker的名称,那么为什么 event.category.kind 不会出现相同的逻辑/语法和 event.location.area ?
相反,我收到了:
事件#index
中的NoMethodError显示/Users/-/app/views/events/index.html.erb 第21行:
#Event的未定义方法`category':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
基本上我想从关联表中输出数据,而不是fore_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 %>
答案 0 :(得分:0)
看看你的模特。 maker.rb
可能包含has_one :event
行,而event.rb
可能包含belongs_to :maker
,但category.rb
与event.rb
没有此类互惠关系。
编辑event.rb以包含:
belongs_to :category
编辑category.rb以包含:
has_one :event
为了轻松地从另一个对象引用一个对象,您必须指定它们之间的关系(在两个方向上)。
答案 1 :(得分:0)
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 %>