這是一個古老的問題,但仍然存在它的醜陋的頭。這是一個不同的,可能更適合我的解決方法。首先,正如其他人所描述的那樣,當使用審計(以前稱爲acts_as_audited)和devise(以及潛在的其他身份驗證gem),然後在審計Devise在您的User模型中使用的任何列時,會發生此錯誤(last_sign_in_at,last_sign_in_ip等)。
- 設計嘗試驗證用戶(使用它的authenticate_user!before_filter)。
- 設計試圖更新/保存後代的用戶登錄信息(last_sign_in_at,ip等)
- 作爲該保存的一部分,審覈然後嘗試爲該更改創建審覈。
- 審覈嘗試爲該審覈設置用戶,以指示由誰進行更改。它是如何做到的?
- 經過審計的調用current_user,一種Devise方法。設計尚未完成其步驟1中的驗證方法 - 審覈已經進入並正在進行。所以,
- 的CURRENT_USER方法重複步驟#1(發生authenticate_user!方法),創建一個無限循環
- 您與堆棧級別太深應用程序錯誤
@ DGM的解決方法簡單地告訴經審覈不審覈此改變,這可能對你有用。但是,在我的應用程序中,我需要審覈該更改。
審計允許您指定一個不同的方法用於current_user。
在應用程序控制器中,添加您的新方法,請參閱current_user 實例變量。
def my_cool_method
@current_user
end
,然後在配置/初始化/ audited.rb,告訴審計使用新的方法:
Audited.current_user_method = :my_cool_method
隨着這一變化,經審覈仍然會審覈的變化,但它不會嘗試設置審計的用戶(進行更改的人) - 這將是零。
DGM替代解決方案的另一個優勢是我們不覆蓋Devise的current_user方法,它類似於猴子修補,因爲它可能會在稍後導致意想不到的後果。
這不適用於authlogic,正如我在下面解釋的。異常代碼發生在無限遞歸之後。 – DGM 2011-07-11 21:21:31