2012-07-06 7 views
0

웹 응용 프로그램이 있으며 세션에 사용자가 선호하는 스타일 시트를 저장하고 싶습니다. 사용자가 로그인하지 않을 때까지 기본 값으로 채울 필요가 있습니다.이 purpouses 세션을 사용하여 (아마도 최선의 해결책은 아니지만 상관 없습니다), 나는이 변수를 초기화 할 수있는 곳이 필요합니다. 예 :레일스는 세션에서 기본값을 초기화합니다.

session[:user_theme] = 'default.css' 

일부 기능에서는 필터를 사용하기 전에 항상 확인하고 싶습니다. 한 번 초기화 한 다음 UI를 통해서만 변경하려고합니다. 더 나은 곳을 찾을 수 있도록 도와 줄 수 있습니까?

+0

왜 필터 전 옵션을 사용하지 않으시겠습니까? 가장 쉽고 빠른 방법 인 것 같습니다. 세션에 [session : : user_theme] || = 'default.css'를 필터로 사용하기 만하면됩니다. application_controller에 배치하면 완료됩니다. – niels

+0

대답은 Thx입니다. 나는 지금 당장 그것을 가지고있다. 하지만 왜 내가 매번 확인해야합니까 (before_filter가 모든 요청을 실행할 때까지 이해할 수 있습니까?)? 그 비용은 거의 아무것도 없다고 생각 합니다만, 초기화 할 수있는 곳이 없습니까? – Chris

+0

이것이 표준 방법이라고 생각합니다. 나는 원칙적으로 한 번만하는 것이 좋겠지 만, 요청을 처리 할 때 나머지 레일이 수행하는 것과 비교할 때 비용은 실제로 아무 것도 없다. 당신은 때로는 실용 주의적이어야한다고 생각합니다 ... – niels

답변

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 

편집

죄송합니다 제가 질문을 오해했다. 그러나 나는 Niels와 동의합니다. 그것은 최고의 장소입니다. 그리고 || = aperator는 한 번만 초기화합니다.

+0

하지만 모든 요청에 ​​대해 점검 할 것입니다 (임권?)? – Chris

+0

네가 맞습니다. 그러나 이것은 무국적 세계입니다. 이 "모든 요청을 확인하십시오"비용은 아무 것도 아닙니다. 그건 내 의견이야. 그러나 나는 다른 해결책에 대해 듣고 싶다. –

관련 문제