如何自定义视图的路径设计使用
Posted
技术标签:
【中文标题】如何自定义视图的路径设计使用【英文标题】:How Do I Customise The Path Devise Uses For Views 【发布时间】:2014-07-26 18:34:42 【问题描述】:我有一些针对 Devise 的 SessionsController
的自定义视图。我正在使用范围视图,因此它们当前位于:
app/views/users/sessions
我需要将视图移动到子文件夹中,以便它们的新位置是:
app/views/public/users/sessions
我已经在application.rb
中指定了我希望 Devise 用于这些视图的布局:
config.to_prepare do
Devise::SessionsController.layout "public/layouts/application"
end
但我看不到指定视图路径的方法。
如何将 public
添加到 Devise 用于查找视图的路径中?
【问题讨论】:
【参考方案1】:如果不覆盖每个控制器并使用 prepend_view_path
添加视图路径,似乎是不可能的:
module Public
module Users
class SessionsController < Devise::SessionsController
prepend_view_path 'app/views/public'
layout "public/layouts/application"
end
end
end
【讨论】:
【参考方案2】:查看范围
我不知道这是否会有所帮助:
#config/initializers/devise.rb
...
config.scoped_views = true
这是 Devise 所说的:
打开范围视图。在渲染“sessions/new”之前,它将首先 检查
users/sessions/new
。默认是关闭的,因为 如果您只使用默认视图,它会更慢。
我猜这意味着如果您在/public
目录中有一个自定义sessions_controller
,它会切换设置以适应?
这是documentation to support this
【讨论】:
谢谢,但正如我在问题中提到的那样,我已经在使用范围视图并且效果很好。问题是如何将public
添加到作用域路径中。【参考方案3】:
我试图找到我们的解决方案,尝试了一些方法并且成功了:
namespace :public, module: nil, path: '' do
devise_for :users, path: ''
end
这将生成路径,例如:/sign_in、/sign_out,不带任何前缀,并使用来自 views/public/users 目录的设计视图
【讨论】:
以上是关于如何自定义视图的路径设计使用的主要内容,如果未能解决你的问题,请参考以下文章