[RUBY-ON-RAILS] 유증에 sign_in 행동에 대한 다른 레이아웃
RUBY-ON-RAILS유증에 sign_in 행동에 대한 다른 레이아웃
나는 sign_in의 조치에 대해 "유증"라는 이름의 다른 / 사용자 정의 레이아웃을 사용하려고 해요. 나는 유증 위키에서이 페이지를 발견하고, 두 번째 예는 심지어 당신이 (행동 sign_in,이 경우) 당 활동을 할 수 있다고하지만, 그 일을 더 예를 보여줍니다. IRC에 누군가가 내가 이것을 시도 할 수 나에게 말했다 :
class ApplicationController < ActionController::Base
protect_from_forgery
layout :layout_by_resource
def layout_by_resource
if devise_controller? && resource_name == :user && action_name == 'sign_in'
"devise"
else
"application"
end
end
end
하지만 여전히 기본 응용 프로그램 레이아웃을로드 할 것으로 작동하지 않는 것 같습니다. 난 어떤 도움을 주셔서 감사합니다.
해결법
-
==============================
1.작업에 대한 사용자 지정 레이아웃을 적용하는 또 다른 방법은 다음과 같다.
작업에 대한 사용자 지정 레이아웃을 적용하는 또 다른 방법은 다음과 같다.
사용법에 따르면 사용자 정의 레이아웃 만들기 "또한 콜백에서 설정 / environment.rb에 (2 레일) 또는 설정 / application.rb (3 레일)이 필요가에서 수행 할 사용하여 특정 유증 컨트롤러의 레이아웃을 설정할 수 있습니다. to_prepare 콜백이 생산 및 개발에 각 요청하기 전에 한 번 실행 때문에. "
config.to_prepare do Devise::SessionsController.layout "devise" Devise::RegistrationsController.layout proc{ |controller| user_signed_in? ? "application" : "devise" } Devise::ConfirmationsController.layout "devise" Devise::UnlocksController.layout "devise" Devise::PasswordsController.layout "devise" end
일반적으로 레이아웃의 차이는 위의 방법은 대부분의 시간을 작동하므로, 인증을 필요로하지 않는 로그인이 필요한 페이지와 페이지 사이에있다. 그러나 나는 또한 특정 작업의 레이아웃을 설정하는 ACTION_NAME 도우미를 사용하여 실험하고 그것은 마법처럼 일했다 :
config.to_prepare do Devise::SessionsController.layout proc{ |controller| action_name == 'new' ? "devise" : "application" } end
나는 이것이 더 나은 대신와 ApplicationController에 도우미를 만드는 유증 컨트롤러 / 액션을 기반으로 레이아웃을 변경하는 방법에 지어 생각한다.
-
==============================
2.난 그냥 응용 프로그램 / 뷰 / 레이아웃 / 궁리 / sessions.html.erb을 만들고 거기에 내 레이아웃을 넣어.
난 그냥 응용 프로그램 / 뷰 / 레이아웃 / 궁리 / sessions.html.erb을 만들고 거기에 내 레이아웃을 넣어.
-
==============================
3.나는 그것을 알아 냈하지만 다른 사람들이 호기심이 경우 여기에이 질문을하겠습니다.
나는 그것을 알아 냈하지만 다른 사람들이 호기심이 경우 여기에이 질문을하겠습니다.
그것은 바보 같은 실수였다. 경로가 아닌 작업입니다 sign_in 사실이다. 관련 소스를 보면, 나는 새로운 고안 세션을 생성, 즉, 필요한 조치가 새로운 것을 볼 수 있습니다. 내 위의 코드를 변경하면 조건부하기입니다 :
if devise_controller? && resource_name == :user && action_name == 'new'
아름답게 작동합니다.
이 사람을 도움이되기를 바랍니다.
-
==============================
4.이것은 내가 그것을 한 방법이다. 사용자가 로그인해야한다면 나는 다른 레이아웃을 원하지만, 사용자가 편집 할 수있는 그 / 그녀의 프로필을 다른 레이아웃이 있다면.
이것은 내가 그것을 한 방법이다. 사용자가 로그인해야한다면 나는 다른 레이아웃을 원하지만, 사용자가 편집 할 수있는 그 / 그녀의 프로필을 다른 레이아웃이 있다면.
나는 레일 4.1.1를 사용하고 있습니다
응용 프로그램 컨트롤러,이 추가 :
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 before_action :configure_permitted_parameters, if: :devise_controller? layout :layout_by_resource # Define the permitted parameters for Devise. protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:firstname, :lastname, :email, :password, :password_confirmation)} devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:avatar, :firstname, :lastname, :email, :password, :password_confirmation, :current_password) } end def layout_by_resource if devise_controller? and user_signed_in? 'dashboard' else 'application' end end end
-
==============================
5.에 의해 지금까지 가장 간단한 해결책은 당신의 app / views / layouts 폴더에 devise.html.haml라는 레이아웃을 만드는 것입니다. 그리고 레일 마법 나머지 처리합니다.
에 의해 지금까지 가장 간단한 해결책은 당신의 app / views / layouts 폴더에 devise.html.haml라는 레이아웃을 만드는 것입니다. 그리고 레일 마법 나머지 처리합니다.
app/views/layouts/devise.html.haml
-
==============================
6.하지에 놀란 것은이 응답 어디서나 볼 수 있지만, 당신은 또한이 작업을 수행 할 수 있습니다
하지에 놀란 것은이 응답 어디서나 볼 수 있지만, 당신은 또한이 작업을 수행 할 수 있습니다
routes.rb에서이 같이 뭔가에 유증의 설정을 변경 :
devise_for :users, controllers: { sessions: 'sessions' }
그런 다음 응용 프로그램 / 컨트롤러 / sessions_controller.rb에서
class SessionsController < Devise::SessionsController layout 'devise', only: [:new] end
당신이 고안 컨트롤러의 추가적인 논리 오버라이드 (override) 할 필요가있는 경우에 특히 유용합니다.
-
==============================
7.그냥 당신이 모르는 경우에, 당신은 또한 그들이에 매핑 작업 / 컨트롤러와 함께 당신의 레일 응용 프로그램의 경로를 볼 레이크 경로를 사용할 수 있습니다.
그냥 당신이 모르는 경우에, 당신은 또한 그들이에 매핑 작업 / 컨트롤러와 함께 당신의 레일 응용 프로그램의 경로를 볼 레이크 경로를 사용할 수 있습니다.
new_user_registration GET /accounts/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"} edit_user_registration GET /accounts/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"} PUT /accounts(.:format) {:action=>"update", :controller=>"devise/registrations"} DELETE /accounts(.:format) {:action=>"destroy", :controller=>"devise/registrations"}
-
==============================
8.여기에 모든 유증 작업이 새로운 레이아웃을 사용하고자하는 사람들을위한 한 줄입니다 :
여기에 모든 유증 작업이 새로운 레이아웃을 사용하고자하는 사람들을위한 한 줄입니다 :
class ApplicationController < ActionController::Base protect_from_forgery layout Proc.new { |controller| controller.devise_controller? ? 'devise' : 'application' } end
from https://stackoverflow.com/questions/4982073/different-layout-for-sign-in-action-in-devise by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 최상의 루비 레일에 소셜 네트워킹 프레임 워크 [마감] (0) | 2020.02.27 |
---|---|
[RUBY-ON-RAILS] 루비 마이크로 소프트 워드 (.DOCX) 문서 만들기 (0) | 2020.02.27 |
[RUBY-ON-RAILS] 여러 속성에 대한 고유성 3 검증 레일 (0) | 2020.02.27 |
[RUBY-ON-RAILS] destroy_all 대 DELETE_ALL? (0) | 2020.02.27 |
[RUBY-ON-RAILS] 레일의 보호 및 개인 방법 (0) | 2020.02.27 |