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

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 目录的设计视图

【讨论】:

以上是关于如何自定义视图的路径设计使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义剃刀视图引擎中使用相对虚拟路径

如何制作与搜索栏和设计一起使用的自定义表格视图

如何在地图视图中添加自定义标注视图

如何在 SwiftUI 视图中使用自定义 UI 控件,例如 Button?

如何配置设计以使用自定义电子邮件布局?

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