2016-12-12 3 views
-1

私は、いつでも、ステータスが:published_at、スケジュール、下書きのgemを使ってポストスケジューリングモデルに取り組んでいます。しかし、問題は、与えられた時点で、その状態をScheduleからPublished_atに変更していないことです。お使いのモデルpost.rbでRubyブログでのポストスケジューリング

#schedule.rb 
    every 1.minute do 
     rake 'scheduler' 
    end 
#example.rake 
task scheduler: :environment do 
    time = Time.zone.now 
    posts = Post.scheduled.where(published_at: (time)) 
    posts.update_all(status: "Published") 

end 

答えて

1
task scheduler: :environment do 
    Post.scheduled.publish_now! 
end 

この行を追加します。

def self.publish_now! 
    where(published_at: Time.now).update_all(status: "Published") 
end 

を私はそれがあまりにもそれが秒で正確な時刻を取得するためTime.nowで検索するためのリスクだと思うが、あなたのスケジューラ1分ごとですので、60秒間のギャップのために投稿を逃す可能性があります。このようにクエリがよくなるように:

def publish_now! 
    where("status != ? AND published_at <= now()", "Published").update_all(status: "Published") 
end 
+0

スケジュール時間を1分から1日に変更するとどうなりますか? –

+0

'published_at == Time.now'と、Time.nowが実行されたとき、例えば3:14:21または3 am 14分21秒と期待される場合、クエリに依存します。その値でのみpublished_at。だから、私は 'published_at <= now()'をstatusが "Published"ではないと設定しています。つまり、現在公開されているすべての下書きが今の時よりも小さいか等しいことを意味します。 – JackBites

関連する問題