扩展设备注册控制器

时间:2013-06-14 15:47:04

标签: ruby-on-rails model-view-controller devise controller

我与Devise建立了Accounts模型。 Devise使用一些属性(例如电子邮件,密码等),但我还有一些其他属性。注册时,我想以某种方式设置它们。

如何扩展注册控制器?我知道我需要实际创建一个这样的新控制器:

class AccountsController < Devise::RegistrationController
  def create
    super
  end
end

我可以在super之后立即添加我的代码吗?我认为资源已经被保存为时已晚。最好的方法是什么?

如果我从头开始编写创作,我怎么知道我没有错过Devise的任何内容?

谢谢,

3 个答案:

答案 0 :(得分:13)

根据Devise documentation,是的,就像Josh的回答一样,你会改变控制器。虽然,您不必从头开始。看一下文档。

您可以生成控制器,以便添加自定义项:

Example: rails generate devise:controllers [scope]

因此,您可以为您的用户范围运行以下内容:

rails generate devise:controllers users

这为您提供了位于此处的文件夹中的控制器: 应用/控制器/用户

然后,告诉您的路线文件使用该控制器。更新您的设计路线,如下所示:

devise_for :users, controllers: { sessions: "users/sessions" }

最后,复制所有观点。如果你尚未对观点进行处理,你需要这样做。控制器已更改,因此您的视图也需要。

答案 1 :(得分:2)

如果您想从头开始重写控制器以获得完全控制权,请从registration_controller.rb Source Code开始,并根据需要进行更改。

告诉设计使用您的自定义控制器就像更改路线一样简单:

devise_for :users, :controllers => { :registrations => "users/custom_controller" } 

答案 2 :(得分:0)

如果您想要用户提供信息的字段,则无需扩展控制器 如果你想自动添加,那么就没有理由在模型中做到这一点! (除非它取决于会话或要求)

在第一种情况下,请参阅https://github.com/plataformatec/devise#configuring-views

如果您打算更改注册流程,则应仅更改DEvise控制器。