根據此自述檔案部分,我指定我只希望在滿足以下條件時跟蹤我的記錄:
has_paper_trail only: [:body], if: Proc.new { |p| !p.draft }
此代碼在我的 Post 模型中。換句話說,我只想對不是草稿的帖子進行版本控制。
令我驚訝的是,將帖子從草稿更改為非草稿會存盤草稿版本:
> Post.last.update body: 'bar', draft: false
> Post.last.versions.count
=> 1
> Post.last.versions.last.reify
=> #<Post id: 274, body: "foo", draft: true ...>
^
我不想跟蹤草稿帖子。我的印象是草稿版本不應該存盤,因為它不符合我的條件。我本來希望在滿足條件之后開始版本控制,而不是之前。
還是我誤解了某些東西或使用了錯誤的寶石?
uj5u.com熱心網友回復:
這種行為對我來說很有意義,因為當狀態從其他狀態更改draft為其他狀態時,狀態不再是保存記錄時draft,因此將存盤以前的版本。
如果您不想存盤最后的草稿版本,那么您需要將您的條件更改為此
has_paper_trail only: [:body], if: Proc.new { |p| !p.draft && !p.draft_was }
或這個
has_paper_trail only: [:body], if: Proc.new { |p| !p.draft && !p.draft_previously_was }
draft_was并且draft_previously_was是由 生成的方法ActiveModel::Dirty。
在將記錄保存到資料庫并提交資料庫更改之后的階段期間,臟屬性和書面記錄都被呼叫并運行。當紙跡檢查條件或可能已經重置但隨后應draft_was設定時,仍可能會根據首先運行的設定進行設定。draft_wasdraft_previously_was
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/497844.html
上一篇:Ruby-根據條件更改值
