不能在命名空间中使用自定义视图设计

时间:2013-07-04 16:28:03

标签: ruby-on-rails devise views

我在我的应用程序中创建了范围

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/

的目录中

1 个答案:

答案 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_fordef 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登录