Ruby on rails 3.2 Rails 3.2.13中NoMethod、nilClass的超级新手问题

Ruby on rails 3.2 Rails 3.2.13中NoMethod、nilClass的超级新手问题,ruby-on-rails-3.2,Ruby On Rails 3.2,另一个新手问题:我需要帮助正确地将“我的病假”、“使用的病假”、“休假”和“使用的休假”属性的默认值设置为零。我认为他们在创建新员工时默认为零,并使我的应用程序崩溃 以下是我得到的错误: 员工索引中的命名错误 显示/Users/ryrythefrenchfry/rails\u projects/time\u tracker/app/views/employees/index.html.erb,其中第24行出现: nil:NilClass的未定义方法“-” 提取的源(第24行附近): 21: 22

另一个新手问题:我需要帮助正确地将“我的病假”、“使用的病假”、“休假”和“使用的休假”属性的默认值设置为零。我认为他们在创建新员工时默认为零,并使我的应用程序崩溃

以下是我得到的错误:

员工索引中的命名错误 显示/Users/ryrythefrenchfry/rails\u projects/time\u tracker/app/views/employees/index.html.erb,其中第24行出现:

nil:NilClass的未定义方法“-” 提取的源(第24行附近):

21:
22:     
23:     
24:     
25:     
26:     
27:     
这是我的模型:

  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
class Employee

感谢您慷慨帮助这只肮脏的代码猴。

显然,员工对象中病假的价值为零。这可能是因为在创建用户对象时它从未初始化。

显然,员工对象中的病假天数值为零。这可能是因为在创建用户对象时它从未初始化。

检查是否指定了病假。我建议您使用gem pry:在您的代码中:

   def remaining_sick_days
      binding.pry
      sick_days - sick_days_used
   end

检查您是否指定了病假。我建议您使用gem pry:在您的代码中:

   def remaining_sick_days
      binding.pry
      sick_days - sick_days_used
   end

正如其他人所提到的,
病假
为零。您可以将错误读取为“负号左侧的对象为零”

您可以尝试以下方法:

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

正如其他人所提到的,
病假
为零。您可以将错误读取为“负号左侧的对象为零”

您可以尝试以下方法:

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

另外,您可以使用三元运算符来缩短代码。就我个人而言,我选择不这样做仅仅是因为我觉得三元运算符读起来不好。谢谢!我发现它仍在吐出错误的原因是,显然,我仍有一些员工以零属性隐藏在数据库中。我销毁了它们,我使用validates:presence来确保我不能再让新员工具有零属性。另外,您可以使用三元运算符来缩短代码。就我个人而言,我选择不这样做仅仅是因为我觉得三元运算符读起来不好。谢谢!我发现它仍在吐出错误的原因是,显然,我仍有一些员工以零属性隐藏在数据库中。我销毁了它们,我使用validates:presence来确保我不能再让一个新员工拥有零属性。是的,就是这样。我仍然有一些员工以零属性隐藏在数据库中。干掉他们,我们就没事了。非常感谢。是的,就是这样。我仍然有一些员工以零属性隐藏在数据库中。干掉他们,我们就没事了。非常感谢。