1

スケジュールとタスクの 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")

もちろん、ユーザー入力の時間と日付の変更が深まっています。上記のコードは、最後に実行したときのものです。

4

1 に答える 1