表years
包含以下字段:id
,name
。
表course
包括:id
,
表year_courses
包括:year_id
和course_id
。
我收到一个例外:
undefined method `name' for nil:NilClass and undefined method `id' for nil:NilClass
答案 0 :(得分:2)
这种情况正在发生,因为对于某些YearCourse(yc)对象,它们没有年份,有些没有课程,所以当rails尝试在已经为零的值.name
上调用yc.year
时你最终得到了'nilnil class'错误。你遇到的另一个错误当然是完全相同的。
要特别解决此问题,您可以尝试以下方法:
<%= content_tag_for :tr, @year_courses do |yc| %>
<%= yc.year.try(:name) %></div>
<%= yc.course.try(:id) %></div>
<% end %>
.try将“尝试”调用该方法,如果失败则不会引发错误。话虽如此,通常在轨道编码中,过度使用方法try
会导致许多不良编码实践。它还可以指示代码气味,指出可能以更好的方式完成建模的事实。否则,在尝试分别调用yc.year.present?
和yc.course.present?
之前,您始终可以检查.name
和.id
。
答案 1 :(得分:0)
另一种解决nil的方法:NilClass错误是转储数据(如果您的应用程序使用您正在试验的虚拟数据),请使用所有必要属性重新设置数据。 rake db:reset
。或rake db:drop
然后rake db:seed