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

Posted

技术标签:

【中文标题】不能在命名空间中使用自定义视图进行设计【英文标题】:can't use custom views for devise in namespace 【发布时间】:2013-07-04 16:28:02 【问题描述】:

我已经在我的应用程序设计范围内创建了

scope '/business' do
    devise_for :accounts, :controllers =>  :sessions => "business/sessions" 
  end
  namespace :business do
    root to: 'user_profiles#index'
    resources :user_profiles
  end

将设计模板保存到业务/会话(例如业务/会话/会话/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

但是当我输入 url 并发送到登录时,我在日志中看到:

Rendered devise/sessions/new.html.erb within layouts/application (94.7ms) 

所以 - 不是布局,也不是​​自定义视图。 我如何告诉设计使用自定义布局和视图?

更新 1 对于视图 - 它们应该放在相应模型的目录中,例如:views/accounts/sessions/

【问题讨论】:

我在class Business::SessionsController、sessions_controller.rb 上没有看到new 方法 它在父 github.com/plataformatec/devise/blob/master/app/controllers/… 父母是什么意思?你试过我的答案吗? class Business::SessionsController &lt; Devise::SessionsController 父母是Devise::SessionsController 您想要自定义视图设计,您应该向您的自定义控制器添加新的和创建操作方法,如果控制器在/business/sessions_controller.rb 中,您应该在/business/sessions/ 文件夹中添加视图。再说一次,你试过我的答案了吗?如果我的答案不起作用,您可以告诉我错误,我会更新我的答案。 【参考方案1】:

试试这个:

 # 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 页面。如果您不想覆盖他们的方法,您可以 要么将它们排除在外,要么直接调用 super。

示例:

def new
 super
end

所以,我建议在 this sessions_controller.rb 的新操作、创建和销毁操作上调用 super,自定义控制器,如下所示:

  # 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 可以放入应用程序控制器看起来像:

   # 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 用于登录

【讨论】:

以上是关于不能在命名空间中使用自定义视图进行设计的主要内容,如果未能解决你的问题,请参考以下文章

android 自定义视图中能不能定义BroadcastReceiver

使用自定义视图的AlertDialog

如何使用自定义列表视图在edittext过滤器中获取空间?可以使用简单的适配器吗?

自定义视图缩小:之前占用的空间没有被清除

如何自定义视图的路径设计使用

具有特定形状的 Android 自定义视图