スケジュールとタスクの 2 つのモデルがあります。タスクは 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 を使用しています。助けていただければ幸いです。ありがとう!
アップデート:
コードに 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")
もちろん、ユーザー入力の時間と日付の変更が深まっています。上記のコードは、最後に実行したときのものです。