使用If .... Then语句在模型中挣扎,Rails 3.2.13

时间:2013-05-07 21:34:31

标签: if-statement ruby-on-rails-3.2

我正在尝试编写一个等式,计算雇员被雇用的时间,以确定他们有多少休假时间。新员工获得10分,经过六年的工作,他们每年额外增加一天,额外增加10天(第16年)。这些方程中的一些单独工作,但它们不能一起工作。所以我认为我遇到了语法问题。

undefined method `-' for nil:NilClass

vacation_days部分正在破坏我的应用程序。

class Employee < ActiveRecord::Base

  def years_employed
    (DateTime.now - hire_date).round / 365
  end

   def vacation_days
       if years_employed <= 6
         10
       end
        if years_employed > 6
         (years_employed.to_i - 6) + 10
       end
       if years_employed > 16
         (years_employed * 0) + 20  
       end
   end

另外,如果您对更好的方法有任何建议,请指导我!

2 个答案:

答案 0 :(得分:2)

你不想要结束,你想要别的,否则它会继续评估 - 所以你有时会回归nil。大致是:

def vacation_days
   if years_employed <= 6
     10
   elsif years_employed <= 16
     years_employed + 4
   else
     20  
   end
end

答案 1 :(得分:1)

作为替代方案,您可以使用case语句和范围

 def vacation_days
    case years_employed
      when 0..6 then 10
      when 7..16 then years_employed+4
      else 20
   end
 end