1

我有两个模型:计划和任务。Task belongs_to Schedule 和 Schedule has_many 任务。我有一个用于任务的嵌套表单,它使用 javascript 通过按下“添加任务”按钮来动态创建更多任务表单。我正在尝试使用 rufus_scheduler 来使任务具有用户输入的结束日期和结束时间。当任务完成时,它应该简单地向服务器打印“yo yo yo”。

使用以下代码,我成功地在几秒钟内完成了第一个任务:

def set_schedule
    scheduler = Rufus::Scheduler.new
    scheduler.in self.tasks.first.timeframe do
        puts 'yo yo yo'
    end
end

在上面的代码中,timeframe 是一个整数字段,用户输入给定的秒数,在该秒数之前作业应该发生。

问题是上面的代码使用了一个间隔,我想使用一个确切的日期和时间。因此,我将时间范围更改为字符串,并让用户以这种格式输入日期:'12/18/2013'。这是我尝试过的:

def set_schedule
   scheduler = Rufus::Scheduler.new
   scheduler.at (self.tasks.first.timeframe + " " + self.tasks.first.complete_time.to_s + " EST")do
       puts 'yo yo yo'
    end
end

为了清楚起见,timeframe 是一个包含日期的字符串,而 complete_time 是一个包含任务结束时间的时间字段。

此代码不起作用。"yo yo yo" 仍然打印,但它只是立即打印。

我正在使用 postgres 数据库在 webrick 上运行 rails。我正在使用 Ruby on Rails 4 和 Ruby 2。我将不胜感激。谢谢!

更新:

我意识到我的代码中有两个错误。complete_time 被自动转换为不可读的格式。我通过将 complete_time 更改为字符串来解决此问题。此外,我意识到我对 .at 方法的论点不在引号中。我解决了这个问题。但是,我仍然遇到同样的问题。与其等到所说的时间放“哟哟哟”,不如马上放。这是新代码:

def set_schedule
    scheduler = Rufus::Scheduler.new
    scheduler.at ("#{self.tasks.first.timeframe}  #{self.tasks.first.complete_time}  EST")do
        puts 'yo yo yo'
    end
end

scheduler.at 方法像这样进入服务器:

scheduler.at("12/03/2013 12:33:00 EST")

当然,用户输入的时间和日期会不断变化,上面的代码只是我最后一次运行它。

4

1 回答 1

1

当 rufus-scheduler #at 或 #in 立即触发其阻塞时,这意味着调度时间已过去。

可能是时区问题。

您可以通过执行以下操作检查 rufus-scheduler 如何查看您的字符串:

require 'rufus-scheduler'
p Rufus::Scheduler.parse('12/03/2013 12:33:00 EST')

在我的系统(Debian GNU Linux、Ruby 1.9.3p392 或 Ruby 2.0.0p195)上,这会产生:

2013-03-12 17:03:00 UTC
于 2013-12-04T07:45:46.987 回答