Я знаю, что это, наверное, простой вопрос, но я все еще пытаюсь вычислить Devise вне...
Я хочу render :layout => false
на моей странице входа; как я могу это сделать с помощью Devise?
Я знаю, что это, наверное, простой вопрос, но я все еще пытаюсь вычислить Devise вне...
Я хочу render :layout => false
на моей странице входа; как я могу это сделать с помощью Devise?
Вы можете подклассифицировать контроллер и настроить маршрутизатор таким образом:
class SessionsController < Devise::SessionsController
layout false
end
И в config/routes.rb
:
devise_for :users, :controllers => { :sessions => "sessions" }
Вам также нужно переместить представления сеанса на этот контроллер.
ИЛИ сделать метод в app/controllers/application_controller.rb
:
class ApplicationController < ActionController::Base
layout :layout
private
def layout
# only turn it off for login pages:
is_a?(Devise::SessionsController) ? false : "application"
# or turn layout off for every devise controller:
devise_controller? && "application"
end
end
Вы также можете создать файл session.html.erb в приложении /views/layouts/devise. Затем этот макет будет использоваться только для знака на экране.
Используя devise_controller? помощник, вы можете определить, когда контроллер Devise активен и соответственно реагирует. Чтобы Devise использовал отдельный макет для остальной части вашего приложения, вы можете сделать что-то вроде этого:
class ApplicationController < ActionController::Base
layout :layout_by_resource
protected
def layout_by_resource
if devise_controller?
"devise"
else
"application"
end
end
end
создайте файл devise.html.erb в своих представлениях/макетах
Итак, если его контроллер устройства будет отображать макет дизайна еще макет приложения
from: https://github.com/plataformatec/devise/wiki/How-To:-Create-custom-layouts
2019 Ответ
TL; DR
$ bundle open devise
а также
#sessions_controller.rb
class Devise::SessionsController < DeviseController
layout false #user-added
.
.
end
Iain ответ работает
Тем не менее, это требует от нас создания контроллера и обновления маршрута, мы можем добиться того же эффекта, открыв исходный каталог gem-устройства devise в нашем комплекте и добавив layout false
в sessions_controller.rb
, вот так
class Devise::SessionsController < DeviseController
layout false #user-added
prepend_before_action :require_no_authentication, only: [:new, :create]
prepend_before_action :allow_params_authentication!, only: :create
prepend_before_action :verify_signed_out_user, only: :destroy
prepend_before_action(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }
# GET /resource/sign_in
def new
self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
yield resource if block_given?
respond_with(resource, serialize_options(resource))
end
.
.
.
end
Для того, чтобы открыть исходный каталог, используйте bundle open devise
(не забудьте установить $ EDITOR или $ BUNDLER_EDITOR)