【发布时间】:2014-01-15 14:34:19
【问题描述】:
所以我有一个方法可以传入两个日期对象(project_start_date 和 project_end_date)。我的目标是获取这些对象之间的范围,这样我就可以将所有这些日期添加到一个数组中,然后如果他们选中了像每周重复这样的框,那么我可以每周添加一个新的里程碑,直到 project_end_date。
现在,作为测试,这作为 Ruby 脚本运行良好,但现在似乎不能作为 rails 中的方法运行(免责声明,我没有编写原始脚本)。具体来说,该函数在函数的范围部分 ((project_start_date..project_end_date).each) 上崩溃。我不认为这是实际日期对象的问题,尽管我确实认为 rails 将日期存储在子元素中的方式很奇怪。
如果有帮助,我将日期对象传递给方法的方式是存储 end_date,然后使用存储的变量调用方法。
调用方法。
p_start_date = params[:new_basecamp_project][:start_date]
p_start_date.to_s
p_end_date = params[:new_basecamp_project][:end_date]
p_end_date.to_s
功能齐全。
date_array = []
(project_start_date..project_end_date).each do |date|
if (date.strftime("%A") != "Sunday") && (date.strftime("%A") != "Saturday")
date_array << date
end
end
weeks = {}
week_num = 1
single_week_array = []
date_array.each do |date|
if date.strftime("%A") != "Friday" && (date.to_s) != (date_array.last).to_s
single_week_array << date
elsif date.strftime("%A") == "Friday" || (date.to_s) == (date_array.last).to_s
single_week_array << date
weeks.merge!(week_num => single_week_array)
week_num += 1
single_week_array = []
end
end
milestones.each do |milestone|
if milestone.has_key?("duration")
week_number = milestone["week_number"]
day_number = milestone["day_number"]
duration = milestone["duration"]
start_date = weeks[week_number][(day_number - 1)]
end_date = date_array[date_array.index(start_date) + (duration - 1)]
if start_date == nil
puts "Week or Day number out of range project dates! Milestone start date set to project end date"
start_date = end_date
end
if end_date == nil
puts "Duration out of range of project dates! Milestone end date set to project end date"
end_date = project_end_date
end
Basecamp::CalendarEntry.new(:project_id => project_hash.id, "title" => milestone["description"], "start-at" => start_date, :deadline => end_date, :type => "CalendarEntry").save
else
(project_start_date..project_end_date).each do |date|
if date.strftime("%A") == milestone["repeat_weekly"]
Basecamp::CalendarEntry.new(:project_id => project_hash.id, "title" => milestone["description"], "start-at" => date, :deadline => date, :type => "CalendarEntry").save
end
end
end
end
【问题讨论】:
-
错误信息是什么?
-
你试过 (start_date..end_date).to_s 吗?
标签: ruby-on-rails ruby date