不能在命名空间中使用自定义视图进行设计
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 < 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_for
和def 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