我有一個Post模型(下面),它有一個回調方法來通過延遲作業修改主體屬性。如果我刪除「延遲」。並執行#shorten_urls!瞬間,它工作正常。但是,從延遲工作的角度來看,它不會保存更新的主體。Rails /延遲作業:無法從延遲作業中保存模型
class Post < ActiveRecord::Base
after_create :shorten_urls
def shorten_urls
delay.shorten_urls!
end
def shorten_urls!
# this task might take a long time,
# but for this example i'll just change the body to something else
self.body = 'updated body'
save!
end
end
奇怪的是,工作是沒有任何問題的處理:
[Worker(host:dereks-imac.home pid:76666)] Post#shorten_urls! completed after 0.0021
[Worker(host:dereks-imac.home pid:76666)] 1 jobs processed at 161.7611 j/s, 0 failed ...
然而,身體不更新。任何人都知道我在做什麼錯了?
- 編輯 -
每Alex的建議,我已經更新的代碼看起來像這樣(但無濟於事):
class Post < ActiveRecord::Base
after_create :shorten_urls
def self.shorten_urls!(post_id=nil)
post = Post.find(post_id)
post.body = 'it worked'
post.save!
end
def shorten_urls
Post.delay.shorten_urls!(self.id)
end
end
對此的任何解答?目前遇到同樣的問題... – 2012-05-02 15:29:38
任何解決方案?有沒有更簡單的方法來做到這一點? – Alex 2012-06-05 19:21:59
@imderek你找到了這個問題的解決方案嗎? – user664833 2012-09-27 19:28:21