2010-08-09 56 views
1

我有額外的變量我添加到authlogic用戶會話,如:ruby​​ on rails的方式來銷燬模型中的額外會話變量?

session[:current_profile] = extra_id 

我目前摧毀這些在註銷像一個控制器:

session[:current_profile] = nil 

我想打掃一下,摧毀他們在after_destroy方法中的會話模型中,例如:

def after_destroy 
    session[:current_profile] = nil 
end 

此會話方法似乎無法從模型中調用。任何想法如何從模型中銷燬會話變量?

謝謝!

回答

2

你真的不應該從Model空間中改變Controller空間中的東西,也就是說,Model不應該控制Controller。模型應該能夠獨立於控制器運行,例如在沒有控制器的單元測試中。

雖然您可能能夠用Observer來討論這類事情,但我不知道一個簡單的方法來做到這一點。讓控制器直接執行所有必要的操作可能會更好。

如果你把after_destroy掛鉤這樣的話,你會產生一些嚴重的副作用,例如,一個用戶以管理員身份登錄會破壞另一個用戶帳戶,然後他們的會話配置文件突然消失。

+0

在模型中處理會話刪除的東西似乎更符合邏輯,但我想這不是約定。在我的情況下,如果我忘記摧毀這些額外的會話數據,實際上會更糟,這就是爲什麼我試圖將它與after_destroy綁定的原因。感謝您的反饋! – djburdick 2010-08-10 07:09:20

+0

起初很多事情似乎都是合乎邏輯的,如果以單向的方式完成的話,那麼最終你會花費大量的時間來減輕副作用,最終結果會變得更加複雜。如果以後遇到問題,在前後觸發器中隱藏神奇功能可能會使程序非常難以調試。更好地將它們暴露在控制器中,即使犧牲了一些次要的冗餘,系列事件也是清楚的。 – tadman 2010-08-10 14:41:24