Ruby 如何将铁路中的假日排除在外4

Ruby 如何将铁路中的假日排除在外4,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我正在尝试为假期请求制作一个应用程序,但我面临一个问题。我有一个名为VacationRequest的e模型和一个显示结果的VacationRequest视图 VacationRequest.rb模型 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) ===

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

VacationRequest.rb模型

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
VacationRequest show.htm.erb

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

@vacation_request.skip_holidays

这显示错误,不起作用。请帮帮我

不能通过向构造函数传递多个参数来创建日期范围。而是调用构造函数两次以创建范围:

special_days = Date.parse("2017-05-09") .. Date.parse("2017-05-12")
或者,如果您只想要这两个日期,请执行以下操作:

special_days = ["2017-05-09", "2017-05-12"].map &:to_date
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

我的做法如下:

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
def skip_假日
特殊日=[“2017-05-09”,“2017-05-12”]地图(&:截止日期)
接受天数=[]
拒绝天数=[]
(开始数据..结束数据)。每个do请求的日期|

accepted_days将准确的错误消息添加到问题循环中。每个都不是获取所有数组,而是仅获取数组的第一个元素。我认为这有助于遍历每个元素并比较它们。它抛出了一个错误:Tue的未定义方法“each”,2017年5月9日:Date您根本没有获取数组
Date.parse(“2017-05-09”,“2017-05-12”)
返回一个
Date
对象。非常感谢我按照你的建议做了很多,但仍然只显示第一个日期。你能告诉我如何在数组中添加假期,然后在员工提出假期请求时从计数中排除,因为我正在尝试这样做!我希望这两个日期不被计数,所以我想把它们放在一个数组中,然后检查这些天是否是用户选择并排除在计数之外的日期之一,但我不知道如何做到这一点。这是休假请求控制器的形式,用户从中选择开始日期和结束日期:Philipp yhanks你真的帮了我很多忙,但我还有另一个问题。这一行的作用是:。映射(&:to_date),因为它跳过了2017-05-09到2017-05-12这两天的日期范围,而不仅仅是这两天。在另一条评论中,您表示您只希望提供的两个日期不被计算。代码行获取每个日期,对它们运行
to_date
方法,并以数组形式返回结果。非常感谢Philipp,你真的帮助了我。我想知道这行代码的作用是什么:特殊日期=[“2017-05-09”,“2017-05-12”]。map(&:to_date),因为不只是这两个日期,而是从2017-05-09到2017-05-12的洞范围。很抱歉,如果我把你弄糊涂了,我希望我在特殊日中输入的日期不被计算。只有我在那里输入的两个日期。你提供了一个日期范围(从开始到结束数据)。你想数一数这些日期中有多少与你定义的特殊天数不同,对吗?如果是这样,那正是我所做到的。