我刚开始使用rails并发现了一个我无法解决的问题。我正在创建一个包含两个模型(奖项和学生)的简单应用程序。 :award has_one :student
和:student belongs_to :award
我被告知在app / views / awards / show.html.erb中,替换:
<%= @award.student_id %>
使用:
<%= @award.student.given_name %> <%= @award.student.family_name %>
并在index.html.erb中,替换:
<%= award.student_id %>
使用:
<%= award.student.given_name %> <%= award.student.family_name %>
在此之后localhost:3000 /学生工作正常,但localhost:3000 /奖项无法正常工作并发出以下错误: -
**NoMethodError in Awards#index**
Showing /home/redblink/rbtest/students/app/views/awards/index.html.erb where line #17 raised:
undefined method `given_name' for nil:NilClass
Extracted source (around line #17):
14: <tr>
15: <td><%= award.name %></td>
16: <td><%= award.year %></td>
17: <td><%= award.student.given_name %> <%= award.student.family_name %></td>
18: <td><%= link_to 'Show', award %></td>
19: <td><%= link_to 'Edit', edit_award_path(award) %></td>
20: <td><%= link_to 'Destroy', award, method: :delete, data: { confirm: 'Are you sure?' } %></td>
请尽快回复解决方案.....
答案 0 :(得分:0)
问题是,awards
记录中有一条记录的相应students
记录不存在,因此返回nil
并且您可以在零上呼叫given_name
。< / p>
所以你可以把它当作:
写下以下内容:
<%= award.student ? award.student.given_name : '' %> <%= award.student ? award.student.family_name : '' %>
而不是
<%= award.student.given_name %> <%= award.student.family_name %>