覆盖设计注册控制器两次?

时间:2014-01-04 22:35:10

标签: ruby-on-rails ruby-on-rails-4 devise

我有两个型号,User和Admin。我想知道是否可以覆盖Devise的注册控制器并拥有两个自定义注册控制器 - 每个模型一个。

我知道可以通过覆盖注册控制器来获得我想要的东西,但我会使用If else语句,但如果我错了,请更正我。我认为如果可能的话,最好避免使用if else语句。

你可以在另一篇文章中看到我到目前为止所做的事情 - 我有视图范围,并且出于某种原因它使用了错误的视图集。 Devise Views with Multiple Models

1 个答案:

答案 0 :(得分:7)

是的,这是可能的


<强>路线

为两个模型生成Devise时,您必须将其添加到路线中:

#config/routes.rb
devise_for :users
devise_for :admin

Devise实际上使用这些路由填充其参数,其中一个是controllers参数:

#config/routes.rb
devise_for :users, controllers: { sessions: "sessions", registrations: "registrations" }
devise_for :admin, controllers: { registrations: "admin/session" }

<强>控制器

这将允许您创建控制器以覆盖Devise默认值:

#app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
    #Your Code Here
end

#app/controllers/admin/registrations_controller.rb
class Admin::RegistrationsController < Devise::RegistrationsController
    #Your Code Here
end