2016-11-22 24 views
4

這與#837有些相關,因爲我在模型上有一個大的數據列,但是我認爲我可能會更好地服務於與該問題相反的建議 - 也就是維護對象列而不是object_changes柱。使用PaperTrail,我可以選擇退出特定模型或atttribute的`object_changes`嗎?

我們一直運行沒有versions.object_changes列。現在我已經添加了這個列,我意識到我正在編寫大量數據,我不關心object_changes中的數據列 - 因爲對數據的微小更改導致它被有效地寫入版本3x(一次object,前兩次爲object_changes)。

我不認爲跳過或忽略是我想要的,因爲我確實希望更改數據來生成新版本。

我應該走下自定義版本模型路線嗎?或者你推薦什麼?

+0

您的模式有多靈活?你能否將這些屬性移動到另一個模型中? –

+0

這個屬性,不 - 它實際上是我最感興趣的數據屬性 - 我只是不想要差異。 –

+0

我也沒有看到在papertrail做到這一點。它可以跳過,也可以忽略。你可以分叉寶石,看看你是否可以添加配置,可以做你想做的。 –

回答

2

一些選項,在降推薦的順序(最強烈推薦在前):

  1. version_limit(支持) - 通過而不是限制你創建一個給定記錄版本數量,使用節省磁盤空間version_limit。 (https://github.com/airblade/paper_trail#2e-limiting-the-number-of-versions-created
  2. 定製表格(支持) - 定製版本型號,不包含object_changes列的定製表格。排除了實驗協會功能(track_associations必須false [默認])
  3. 補丁recordable_object_changes,方法1(不支持) - 定製版車型,但仍然使用versions表。覆蓋#paper_trail以返回覆蓋RecordTrail#recordable_object_changes的自定義子類RecordTrail。重寫這些方法會破壞您的保修。
  4. 修補程序recordable_object_changes,方法2(不支持) - 覆蓋RecordTrail#recordable_object_changes,添加一個類檢查條件。除了你想要破解的模型之外,請爲所有人打電話。重寫此方法會破壞保修。
  5. 自定義序列化程序(支持,但不是爲此) - 自定義序列化程序與類檢查條件,並告訴你是否序列化object_changes而不是object。可能是一個糟糕的主意,看起來真的很黑。

最後,我很樂意回顧增加一項新功能的PR,能夠根據每個型號配置哪些數據應寫入object_changes列。如果你認真對待這個問題,並看到它完成,請開一個新的問題,以便我們可以進一步討論。有幾種不同的設計可以工作。

+0

謝謝Jared! –

相關問題