1

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

因此,我需要命名所有内容。命名视图和控制器并不难,但是,我想知道是否有一种方法可以命名控制器而不必指定每个设计控制器。

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

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"
}

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

4

2 回答 2

2

看看在命名空间内设计的以下答案。在 routes.rb 中简单地命名空间不会产生预期的结果。您必须为所需的每个操作生成控制器。例如,对于会话,您必须在控制器 Employer 命名空间中创建一个名为 Sessions 的新控制器:

bundle exec rails g controller employer/sessions

然后从设计会话控制器子类化新的会话控制器,以引入正确处理会话所需的所有设计方法:

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 目录。您可以在 config/initializers/devise.rb 中通过我的设置“config.scoped_views = true”执行此操作,并运行以下命令生成范围为雇主的视图:

rails generate devise:views users

这应该在 app/views/employer/sessions/new 生成模板。否则,新的会话控制器将只使用默认视图模板。

希望这可以帮助!

于 2013-06-29T17:28:28.323 回答
0

只需说:devise_for :employers, :path => "employers"

于 2012-09-01T02:24:02.203 回答