命名用于设计的所有控制器

时间:2012-09-01 01:53:34

标签: ruby-on-rails namespaces devise

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

因此,我需要命名一切。命名空间视图和控制器并不困难,但是,我想知道是否有办法命名控制器,而无需指定每个设备控制器。

例如,有没有办法基本上这样做:

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

可能看似微不足道但是如果你有三个模型可以维持它可能会有点多。

2 个答案:

答案 0 :(得分:2)

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

bundle exec rails g controller employer/sessions

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

class Employer::SessionsController < Devise::SessionsController
end

并更改您的'devise_for:employer,:controller =&gt; “employees”'在config / routes.rb中排到以下内容:

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上生成模板。否则,新会话控制器将只使用默认视图模板。

希望这有帮助!

答案 1 :(得分:0)

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