2013-05-07 59 views
0

我试图编写一个公式来计算雇员雇用了多长时间来确定他们有资格享受多少休假时间。新员工获得10个,经过6年的工作后,他们每年获得额外的一天,并在十天后(第16年)关闭。这些方程中的一些独立工作,但它们不能一起工作。所以我想我有一个语法问题。用If语句苦苦挣扎......然后在模型中使用语句,Rails 3.2.13

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

你不想结束,你想要别人,否则它会继续评估–,所以有时你会返回nil。大致为:

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

沿太谢谢你了!我喜欢你如何重写方程式,它看起来好多了。 – Alaric 2013-05-07 21:50:19

1

只是作为一种替代你可以使用一个case语句与范围

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