NoMethod的超级新手问题,Rails 3.2.13中的nilClass

时间:2013-05-03 14:27:39

标签: ruby-on-rails-3.2

另一个新手问题:我需要帮助正确设置我的sick_days,sick_days_used,vacation_days和vacation_days_used属性的默认值为零。我认为他们在创建新员工时默认为nil并崩溃我的应用程序。

这是我得到的错误:

  员工#index 中的

NoMethodError      

显示/Users/ryrythefrenchfry/rails_projects/time_tracker/app/views/employees/index.html.erb第24行:

     

未定义的方法` - '为nil:NilClass   提取的来源(第24行):

21:     <td><%= employee.first_name + " " + employee.last_name %></td>
22:     <td><%= employee.hire_date %></td>
23:     <td></td>
24:     <td><%= employee.remaining_sick_days %></td>
25:     <td></td>
26:     <td><%= employee.remaining_vacation_days %></td>
27:     <td></td>

这是我的模特:

  class Employee < ActiveRecord::Base
    attr_accessible :employee_id, :first_name, :hire_date, :last_name, :sick_days, :vacation_days, :sick_days_used, :vacation_days_used

   def remaining_sick_days
      sick_days - sick_days_used
   end

   def remaining_vacation_days
      vacation_days - vacation_days_used
   end
 end

感谢您慷慨地帮助这个笨拙的代码猴。

3 个答案:

答案 0 :(得分:2)

显然,您的Employee对象中的sick_days值为nil。这可能是因为它在您创建User对象时从未初始化。

答案 1 :(得分:1)

正如其他人所说,sick_days是零。您可以将错误读作“减号左侧的对象为零”。

您可以尝试这样的事情:

def remaining_sick_days
   if sick_days.nil?
     0
   else 
     sick_days - sick_days_used
   end
end

答案 2 :(得分:0)

检查您是否指定了病假。我建议你使用gem pry:http://railscasts.com/episodes/280-pry-with-rails并在你的代码中使用:

   def remaining_sick_days
      binding.pry
      sick_days - sick_days_used
   end