我在我的应用程序中创建了范围
scope '/business' do
devise_for :accounts, :controllers => { :sessions => "business/sessions" }
end
namespace :business do
root to: 'user_profiles#index'
resources :user_profiles
end
将设计模板保存到业务/会话(ex business / sessions / sessions / new.erb) 并编写了业务/会话控制器
class Business::SessionsController <
Devise::SessionsController
layout: 'temp'
def after_sign_in_path_for(resource)/
"/business"
end
def after_sign_out_path_for(resource)
'/business'
end
end
但是当我输入网址并发送到登录时,我会在日志中看到:
Rendered devise/sessions/new.html.erb within layouts/application (94.7ms)
所以 - 不是布局而不是自定义视图 我如何告诉设计使用自定义布局&amp;视图?
更新1
对于视图 - 它们应放在相应模型ex:views/accounts/sessions/
答案 0 :(得分:2)
试试这个:
# routes.rb
devise_for :accounts, :except => [:sessions]
scope '/business' do
devise_scope :account do
get '/login' => 'sessions#new', :as => :new_account_session
post '/process' => 'sessions#create', :as => :account_session
delete '/logout' => 'sessions#destroy', :as => :destroy_account_session
end
end
如果您想要自定义设计会话,
您想要覆盖您的控制器中的任何逻辑 可以通过调用该方法并插入自己的逻辑来覆盖。对于 在该控制器中的内容列表中,您可以查看其中的代码 Github页面。如果你不想覆盖他们的方法,你可以 要么把它们留下来,要么只是打电话给超级。
示例:
def new
super
end
所以,我建议调用super来创建新的,创建和销毁来自this sessions_controller.rb的动作,自定义控制器,看起来像:
# bussiness/sessions_controller.rb
class Business::SessionsController < Devise::SessionsController
layout 'temp'
def new
super
end
def create
super
end
def destroy
super
end
end
您可以将after_sign_in_path_for
和def after_sign_out_path_for
放入applocation控制器中,如下所示:
# application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
def after_sign_in_path_for(resource)
business_path
end
def after_sign_out_path_for(resource)
business_path
end
end
并查看business/sessions/new.erb
http://localhost:3000/business/login
登录