我正在尝试编写一个应用程序来计算病假/休假天数以及员工在任一类别中的可用时间。这是我的麻烦:
在我看来,持续时间方程有效并显示了正确的数字,但我已经把数学放在了视图中,我知道这很糟糕。但是当我尝试在我的员工类中使用持续时间方程时(这样我就可以将数学移出视图)它不起作用,我认为这是因为持续时间由于某种原因被保存为“nil”。我不知道为什么要这样做,因为其他所有内容都与我在表单中输入的任何信息一起保存在数据库中。
也许是因为没有在表单中手动输入持续时间,而是对日期范围做出反应?
这是我想在员工模型中调用持续时间以使数学脱离视图的地方:
def remaining_vacation_days
vacation_days - @furlough.duration if @furlough.description == "Vacation"
end
def remaining_sick_days
sick_days - @furlough.duration if @furlough.description == "Sick"
end
这是定义持续时间的模型:
class Furlough < ActiveRecord::Base
attr_accessible :duration # and other stuff
belongs_to :employee
validates_presence_of :duration # and other stuff
def duration
only_weekdays(date_from..date_to) - psb_holidays
end
def only_weekdays(range)
range.select { |d| (1..5).include?(d.wday) }.size
end
def psb_holidays
Holidays.between(date_from, date_to, :us, :observed).size
end
end
让我失望的是,在控制台中我看到的是:
1.9.3-p0 :008 > ryan = Furlough.find(18)
Furlough Load (0.3ms) SELECT "furloughs".* FROM "furloughs" WHERE "furloughs"."id" = ? LIMIT 1 [["id", 18]]
=> #<Furlough id: 18, duration: nil, date_from: "2013-12-20", note: "Christmas vacation!", created_at: "2013-05-08 14:33:03", updated_at: "2013-05-08 14:34:07", employee_id: 16, description: "Vacation", date_to: "2013-12-29">
看,它是零,但后来我明白了:
1.9.3-p0 :009 > ryan.duration
=> 5
我不知所措。