扩展设备注册控制器
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内核)
玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制