【问题标题】: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 用于查找视图的路径中?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 view 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 目录的设计视图

      【讨论】:

        猜你喜欢
        • 2018-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-31
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多