扩展设备注册控制器

Posted

技术标签:

【中文标题】扩展设备注册控制器【英文标题】:Extending Devise Registration Controller 【发布时间】:2013-06-11 08:00:07 【问题描述】:

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

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

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

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

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

谢谢,

【问题讨论】:

【参考方案1】:

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

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

Example: rails generate devise:controllers [scope]

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

rails generate devise:controllers users

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

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

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

这是最好的扩展方式吗?这只是我需要添加的两个属性。另外,你如何告诉 Devise 我有一个新的控制器(这样它就不会使用 gem 中的那个)? @Darksky 最好的?我不太确定。你可以试一试,看看它感觉有多“脏”。我更新了我的答案,并解释了告诉设计你的新控制器。 如果我只想覆盖而不重新创建它怎么办?如何做到这一点?【参考方案3】:

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

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

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

【讨论】:

但是执行before_save 并调用在模型中设置某些值的方法会破坏设计和注册无法正常工作。 它不会让我登录并注册重定向到主页(没有验证用户和通行证)。我最终改为在数据库中设置默认值。

以上是关于扩展设备注册控制器的主要内容,如果未能解决你的问题,请参考以下文章

RK3399驱动开发 | 16 -PCA9557 GPIO 扩展芯片的使用(linux5.4.32内核)

RK3399驱动开发 | 16 -PCA9557 GPIO 扩展芯片的使用(linux5.4.32内核)

linx下如何驱动spi

玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制

是否可以将未经 Play 认证的设备注册到 Android 管理 API?

例外:-尽管删除了扩展的小部件,但没有布置 RenderBox