2016-12-12 73 views
-1

我正在使用gem「when」狀態:publish_at,日程安排和草稿來發布日程安排模型。但問題是,在給定時間,郵政不會將其狀態從Schedule調整爲Published_at。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 
在模型

post.rb加入這一行:

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

我覺得太危險的Time.now搜索,因爲它會得到第二確切的時間,但你的調度每1分鐘一次,所以你有可能因爲缺口60秒而錯過Post。所以,你更好地這樣查詢:

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點14分21秒,所以它只能找到Post僅在該值上發佈。這就是爲什麼我設置「published_at <= now()」的狀態不是「已發佈」,這意味着查找發佈的所有草稿現在的版本低於或等於現在的版本。 – JackBites