奖项#index中的NoMethodError

时间:2012-08-06 10:28:10

标签: ruby ruby-on-rails-3

我刚开始使用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>

请尽快回复解决方案.....

1 个答案:

答案 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 %>