简体   繁体   中英

Devise custom layout

I need some help here.

I'm using the Devise gem for authentication and I've set up my routes as follow

Rails.application.routes.draw do
  devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'join', password: 'forgot-password', edit: 'settings'}
  root to: 'pages#index'
end

I am then using a different layout file for all devise views

class ApplicationController < ActionController::Base
  layout :layout_by_resource

  private

  def layout_by_resource
    if devise_controller? && resource_name == :user
      "devise_custom"
    else
      "application"
    end
  end
end

This works fine but I would like to make an exception for devise users/edit. So that the registrations edit action uses the application layout instead.

Please anyone, how can I achieve this?

Thanks in advance!

/ Jacob

According with this section , you can do something like this

class ApplicationController < ActionController::Base
    # Layout per resource_name
    def layout_by_resource
      if devise_controller? && resource_name == :admin
        "layout_name_for_devise_admin"
      else
        "application"
      end
    end

    # Layout per resource_name AND action
    def layout_by_resource
      if devise_controller? && resource_name == :user && action_name == "new"
        "layout_name_for_devise"
      else
        "application"
      end
    end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM