如何在rails4中排除计算假期

时间:2017-05-08 19:43:53

标签: ruby ruby-on-rails-4

我正在尝试为假期请求制作一个应用程序,但我遇到了一个问题。我有一个名为VacationRequest的模型和一个VacationRequest视图,其中将显示结果。

VacationRequest.rb模型

user_ID    points    activity_type_ID
1          1         8
3          2         8
3          1         8

VacationRequest show.htm.erb

这里我从模型中调用了方法

def skip_holidays
  count1 = 0
  special_days = Date.parse("2017-05-09", "2017-05-12")

  special_days.each do |sd|
    if ((start_data..end_data) === sd)
      numero = (end_data - start_data).to_i 
      numro1 = numero - sd
    else
      numero = (end_data - start_data).to_i 
    end
  end
end

这显示错误并且无法正常工作。请帮帮我!

3 个答案:

答案 0 :(得分:0)

您无法通过将多个参数传递给构造函数来创建日期范围。而是调用构造函数两次以创建范围:

special_days = Date.parse("2017-05-09") .. Date.parse("2017-05-12")

或者如果您只想要两个日期,请执行:

special_days = ["2017-05-09", "2017-05-12"].map &:to_date

答案 1 :(得分:0)

这个Date.parse("2017-05-09", "2017-05-12")不会创建一个范围,只返回解析的第一个参数:

#irb
Date.parse("2017-05-09", "2017-05-12")
=> Tue, 09 May 2017

你可以这样做:

initial = Date.parse("2017-05-09")
final = Date.parse("2017-05-12")

((initial)..final).each do |date|
  #rules here.
end

答案 2 :(得分:0)

我对此的处理方法如下:

def skip_holidays
  special_days = ["2017-05-09", "2017-05-12"].map(&:to_date)
  accepted_days = []
  refused_days = []
  (start_data..end_data).each do |requested_date|
    accepted_days << requested_date unless special_days.include?(requested_date)
    refused_days << requested_date if special_days.include?(requested_date)
  end
  accepted_day_count = accepted_days.count
  refused_days_count = refused_days.count
end

这样你迭代了所有请求的日期(范围),检查日期是否是特殊日期 - 如果是,拒绝它,否则接受它。 最后,您可以显示有关已接受和拒绝日期的统计信息。