2017-03-20 43 views
0

我們的模型的whodunnit值是一個字符串 - 例如"22"作爲User22idPaperTrail:當我們跟蹤用戶*和* AdminUsers的變化時如何區分whodunnit?

問題是我們同時使用UserAdminUser模型跟蹤whodunnit。因此,它是不可能的,判斷一個變化是由用戶或製成,而不是由一個管理用戶:

def user_for_paper_trail 
    current_user || current_admin_user 
end 

我是一個有點新的PaperTrail,但通過他們的文檔的工作我的方式,並不能想出任何解決方案。這可能是一個奇怪的請求,但我喜歡像任意字段那樣的東西,如果這樣做合理,我們可以爲它添加一個值作爲whodunnit type。或者根據控制器只跟蹤某些更改的方式(在這種情況下,這將起作用,因爲我只跟蹤通過AdminPanel進行的更改)。

感謝您的任何建議或指導。

+0

使用一個統一的'User'模型通過角色區分管理員是不是一種選擇? – nicooga

回答

1

PaperTrail正存儲,因爲這兩個原因之一id

  • Whodunnit正在使用默認before_action該PaperTrail提供分配和呼籲通過your user_for_paper_trail方法返回的值.id

  • 您的應用程序手動調用您的user_for_paper_trail方法的結果.id

由於UserAdminUserid s爲不通用唯一,你應該存儲不同的值。

whodunnit值可以是您決定的任何字符串。如果您有一個可用於區分UsersAdminUsers的唯一標識符,則應該存儲該值。

我想到的這些選項可能會解決您的問題之一:

  1. 如果email是兩個用戶模型之間唯一的,存儲的電子郵件,而不是ID。

  2. 如果email不是唯一的,你可以存儲一個字符串,同時顯示了用戶模型類型和ID(例如'User: 1'和/或'AdminUser: 1'),那麼當你去獲取whodunnit值可以解析爲字符串用戶模型和id,然後酌情使用該信息。

  3. 請仔細閱讀如何PaperTrail details how to find out who was responsible for a change並提出類似的自定義解決方案(或another option)。

+0

謝謝@ecnalyr。我覺得#2符合我期望的內容,但是我沒有在你關聯的文檔中看到任何關於它的內容(我今天早些時候閱讀過它們 - 也許我錯過了它)。 – TCannadySF

+1

對於未來的探索者:依靠上述解決方案,我決定在模型的管理面板中添加一個'before_filter'。在它內部,我爲'whodunnit'設置了這個值:'PaperTrail.whodunnit =「AdminUser:#{current_admin_user.id}」' – TCannadySF