2012-07-06 49 views
0

我有一個web應用程序,我想在會話中存儲用戶首選樣式表,並且我需要將它默認填充爲默認值,直到用戶未登錄或等等。對於這個purpouses,我使用會話(可能不是最好的解決方案,但沒關係),我需要一個地方,我可以初始化這個變量。例如:Rails在會話中初始化默認值

session[:user_theme] = 'default.css' 

我不想在某些功能過濾器之前,每一次檢查,我想初始化一次,然後只能通過UI改變。 你能幫我找到更好的地方嗎?

+0

爲什麼你不想使用before-filter-option?這似乎是最簡單快速的方法,你只需要一個'session [:user_theme] || ='default.css'作爲過濾器的方法。把它放在你的application_controller中,你就完成了。 – niels 2012-07-06 08:09:31

+0

Thx回答。我現在有這個。但爲什麼我需要每次檢查它(據我所知,before_filter執行每個請求?)?我認爲它的成本幾乎沒有,但是我沒有可以初始化它的地方嗎? – Chris 2012-07-06 08:14:52

+0

我相信這是做這些事情的標準方法。我同意,從原則上講,只做一次這樣做會很好,但與處理請求時所有其他軌道所做的相比,這些成本實際上完全沒有。猜你有時必須務實...... – niels 2012-07-09 06:18:13

回答

1

我認爲應用程序控制器是一個很好的地方。類似的東西應該工作。

class ApplicationController < ActionController::Base 
    before_filter :set_theme 

    def set_theme 
    session[:user_theme] ||= (current_user ? current_user.preferred_theme : 'default.css') 
    end 
end 

編輯

哎呀我沒看錯的問題。但我同意尼爾斯,這是最好的地方。 || = aperator只會初始化一次。

+0

但它會檢查它的每一個請求(我對吧?)? – Chris 2012-07-06 08:41:45

+0

是的你是對的。但請記住,這是一個無國界的世界。這個「檢查每個請求」的成本是沒有的。這只是我的看法。但我想知道其他解決方案。 – 2012-07-06 09:03:54