2014-01-28 2 views
0

В моем приложении я хочу использовать различные схемы, когда пользователь вошел в систему и неRails: различные макеты

application_controller:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    layout :determine_layout 

    private 

    def determine_layout 
     user_signed_in? ? 'application' : 'landing' 
    end 

end 

Но этот код не работает: макеты не меняется. Может ли это сделать? Или какие-то ошибки я сделал?

Спасибо!

+0

Код выглядит нормально, а какой у вас у вас всегда есть макет? – apneadiving

+0

, когда пользователь регистрируется в 'приложении', и когда пользователь не зарегистрирован в макете, это' приземление' –

+1

ОК, поэтому ваш метод работает ... – apneadiving

ответ

1

Собиралась написать как комментарий, но это будет легче обрабатывать здесь:

Согласно Devise github wiki, вы можете определить, является ли он основан на devise_controller или нет:

class ApplicationController < ActionController::Base 
    layout :layout_by_resource 

    protected 

    def layout_by_resource 
    if devise_controller? 
     "layout_name_for_devise" 
    else 
     "application" 
    end 
    end 
end 

Это позволило бы вы должны указать пользователю на sessions#landing, если они не вошли в систему, что означало бы создание нового действия в пользовательском контроллере сессий разработки.

Это привело бы к сужению процесса определения если они вошли в систему или нет (если они не вошли в систему, они могут видеть статические представления с контроллеров session или registrations в Devise

Смежные вопросы