我有一个错误:未定义的方法`name'对于nil:NilClass和undefined方法`id'为零:NilClass

时间:2014-05-05 20:25:45

标签: ruby-on-rails ruby activerecord ruby-on-rails-4

years包含以下字段:idname

course包括:id

year_courses包括:year_idcourse_id

我收到一个例外:

undefined method `name' for nil:NilClass and undefined method `id' for nil:NilClass

2 个答案:

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