我知道這個問題已經很老了,但讓我解釋一下我是如何設法解決它:
假設我有一個模型Post
,兩個用戶:A
和B
,即A
被授權更新的帖子,但在提交更改之前他需要B
批准,B
是可以批准更新並可以更新帖子的監視器。
- 我添加了一個方法來記錄恢復到它的一個特殊版本,所以我們可以用我們想要的任何版本更新:
def revert_to(version)
raise 'not version of this model' unless self == version.item
changes = version.changeset.select{ |k, v| not SKIP_FIELDS.include?(k) }.map{ |k,v| [k.to_sym, v[1]] }.to_h
self.update_attributes(changes)
end
我得到的方法從這個Stackoverflow answer但我修改它有點。
- 訣竅是不更新記錄本身如果當前用戶
A
尚未授權提交改變,而不是更新,新的紙徑版本將創建,那麼監視器B
可以通過將原始記錄還原爲該版本來接受新更改。
因我從紙徑核心paper_trail.record_update()
使用的功能。
答:
p = Post.find(1)
p.title = "A new pending version"
p.paper_trail.record_update(nil)
乙作爲監視器:
p = Publication.find(1)
p.revert_to(p.versions.last)
乙作爲一個編輯:
p = Publication.find(1)
p.title = "p will be updated to this version immediately"
p.paper_trail.record_update(nil)
p.save
- 我加
has_paper_trail
發佈與模型,但我限制它的創建和銷燬的行動,因爲正如我上面說我不想更新後,要創建一個新的版本,我希望它在之前被創建。
has_paper_trail :on => [:create, :destroy]