我将 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/