2010-02-08 22 views
6

有沒有人在Rails中實現了after_commit hook?我不是在尋找基於更新提交後的模型/新建/ etc,我希望能夠動態地定義將要執行的塊只有在當前(最上面的)交易通:Rails after_commit?

def remove_file 
    current_transaction.after_commit do 
    FileUtils.rm(file_path) 
    end 
end 

任何想法,如果這已經實施,如果它將在軌道3.0?

+0

你能不能做一個after_save的檢查,如果你的對象已更新? – marcgg 2010-02-08 10:21:52

+0

如果您的交易僅包裝單個模型的保存操作,則這將起作用。我需要至少包裝'Node + Version + Attachment' ... – gaspard 2010-02-09 12:02:42

回答

2

在Rails 3.0中你不會看到after_commit,至少現在還沒有。你可以申請一個補丁,看看它是否得到核心團隊的批准,但我懷疑它會。在一個插件中,這個功能在Rails核心之外保持更多功能。

你可以試試這個插件:

http://github.com/GUI/after_commit

+0

我看了一下這個插件,但它是提交後定義的一種靜態方式,它們與我所看到的單一模型掛鉤。我會在保存時向pre_commit回調添加一些內容。 – gaspard 2010-02-09 12:05:30

1

我創建了一個輕量級的after_commit插件:after_commit plugin ,使語法如下:

def some_callback 
    after_commit do 
    # save file, expire cache, etc 
    end 
end 

它非常輕巧,但做這項工作。

1

由於OP詢問在提交事務後動態設置要執行的代碼,after_commit不能解決他的問題。幸運的是,有確切解決這個問題的gem after_commit_queue

使用OP的例子中,代碼應該是這樣的:

include AfterCommitQueue 

def remove_file 
    run_after_commit do 
    FileUtils.rm(file_path) 
    end 
end 
相關問題