我正在使用具有多个模型的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"
}
可能看似微不足道但是如果你有三个模型可以维持它可能会有点多。
答案 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"
吗?