ruby-on-rails - 为设计的所有 Controller 命名空间

标签 ruby-on-rails namespaces devise

我将 Devise 与多个模型(确切地说是三个)一起使用,每个角色都有一些不同的交互。例如,在用户模型注册后,我重写了一个设计方法,将它们重定向到特定的欢迎路径,在雇主模型中,我将它们带到信用卡表单等。

因此,我需要为所有内容命名。为 View 和 Controller 命名空间并不困难,但是,我想知道是否有一种方法可以命名 Controller 而无需指定每个设计 Controller 。

例如,有没有办法基本上做到这一点:

devise_for :employers, :controller => "employers"

而不是必须这样做:
devise_for :employers, :controllers => { 
 :registrations => "employers/registrations",
 :sessions => "employers/sessions",
 :confirmations => "employers/confirmations",
 :passwords => "employers/passwords",
 :unlocks => "employers/unlocks",
 :mailer => "employers/mailer"
}

可能看起来微不足道,但是当您需要维护三个模型时,它可能会变得有点多。

最佳答案

看看以下来自 Devise within namespace 的回答.简单地在 routes.rb 中命名空间不会产生预期的结果。你必须为你想要的每个 Action 生成 Controller 。例如,对于 session ,您必须在 Controller Employer 命名空间中创建一个名为 Sessions 的新 Controller :

bundle exec rails g controller employer/sessions

然后从设计 session Controller 继承新的 session Controller ,以引入正确处理 session 所需的所有设计方法:
class Employer::SessionsController < Devise::SessionsController
end

并将 config/routes.rb 中的 'devise_for :employers, :controller => "employers"' 行更改为以下内容:
devise_for :employers, :controllers => { :sessions => "employer/sessions" }

最后,作为可选步骤,您可以生成 app/views/employer/sessions 目录的 View 。你可以这样做我的设置 "config.scoped_views = true"在 config/initializers/devise.rb 中并运行以下命令以生成适用于雇主的 View :
rails generate devise:views users

这应该在 app/views/employer/sessions/new 生成模板。否则,新的 session Controller 将只使用默认的 View 模板。

希望这可以帮助!

关于ruby-on-rails - 为设计的所有 Controller 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224292/

相关文章:

ruby-on-rails - 在 Ruby 中循环时获取额外信息

ruby-on-rails - database.yml &references 不工作

ruby-on-rails - Ruby on Rails : setting future "publishing" dates for blog postings

namespaces - 找不到 Laravel 和 Laratrust 命名空间

asp.net - 将 Web 用户控件移动到不同的命名空间

ruby-on-rails - Rails 自定义验证

android - 属性缺少android命名空间前缀,找不到错误

ruby-on-rails - 如何测试依赖于 Devise signed_in 的 Rails 5 助手? helper ,用 Minitest?

ruby-on-rails - 设计管理员注销错误

ruby-on-rails - 在Ruby on Rails中使用Devise为用户播种