8

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

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

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

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

如果我要从头开始编写 create,我怎么知道我没有错过 Devise 所做的任何事情?

谢谢,

4

3 回答 3

15

根据设计文档,是的,就像乔希的回答一样,您将更改控制器。虽然,您不必完全从头开始。看看文档。

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

Example: rails generate devise:controllers [scope]

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

rails generate devise:controllers users

这将为您提供位于此处的文件夹中的控制器: app/controllers/users

然后,告诉你的路由文件使用那个控制器。将您的设计路线更新为如下所示:

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

最后,复制所有视图。如果您尚未生成视图,则需要这样做。控制器已更改,因此您的视图也需要更改。

于 2015-04-28T07:08:01.887 回答
2

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

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

devise_for :users, :controllers => { :registrations => "users/custom_controller" } 
于 2013-06-14T15:53:55.813 回答
0

如果您想输入用户提供的信息字段,则无需扩展控制器。
如果你想自动添加这些,没有理由不在模型中这样做!(除非它取决于会话或请求)

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

仅当您打算更改注册流程时才应更改 DEvise 控制器。

于 2013-06-14T17:44:38.740 回答