2016-12-12 1 views
-1

Ich arbeite am Post-Scheduling-Modell, indem ich "whenew" mit dem Status published_at, schedule und drafts verwende. Aber das Problem ist zu gegebener Zeit, dass Post seinen Status von Schedule zu Published_at nicht ändert.Postplanung im Ruby-Blog

#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 

Antwort

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

in Ihrem Modell diese Zeilen post.rb hinzufügen:

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

Ich denke, es ist zu Risiko von Time.now zu suchen, weil es genaue Zeit in Sekunden erhalten wird, aber Ihr Scheduler ist jede 1. Minute, so haben Sie die Möglichkeit, Post wegen Lücken 60 Sekunden zu verpassen. Also besser, dass Sie so fragen:

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

Wenn ich die Zeit von 1.minute auf einen Tag ändern ist es wichtig? –

+0

Es spielt eine Rolle, hängt von Ihrer Frage ab, ob Sie 'published_at == Time.now' erwarten und wann Time.now ausgeführt wird, Beispiel 3:14:21 oder 3 Uhr 14 Minuten 21 Sekunden, so dass Post nur mit gefunden wird published_at nur für diesen Wert. Deshalb setze ich 'publiced_at <= now()' mit dem Status "nicht veröffentlicht", was bedeutet, dass alle Entwürfe, die veröffentlicht wurden, jetzt niedriger oder gleich der Zeit sind. – JackBites

Verwandte Themen