Ruby on rails 使用现有设计用户/编辑功能更新自定义用户属性
我的用户在电子邮件、密码等常规设计栏旁边有一个Ruby on rails 使用现有设计用户/编辑功能更新自定义用户属性,ruby-on-rails,devise,Ruby On Rails,Devise,我的用户在电子邮件、密码等常规设计栏旁边有一个名称。我希望用户能够编辑自己的帐户设置,包括他们在/users/edit的姓名,感谢designe为我们提供了开箱即用的注册 我在视图中添加了一个名称输入(此处简化): 这将在表单中正确呈现名称,我可以编辑和保存,但是名称不会更新,而其他内容会更新。我想象Deave会简单地获取表单中的params并使用这些params更新资源,而不管它们是什么,但这里的情况似乎不是这样 我通过重写控制器使其工作(同样,只显示了最重要的代码): 类注册控制器
名称
。我希望用户能够编辑自己的帐户设置,包括他们在/users/edit
的姓名,感谢designe为我们提供了开箱即用的注册
我在视图中添加了一个名称
输入(此处简化):
这将在表单中正确呈现名称,我可以编辑和保存,但是名称不会更新,而其他内容会更新。我想象Deave会简单地获取表单中的params
并使用这些params更新资源,而不管它们是什么,但这里的情况似乎不是这样
我通过重写控制器使其工作(同样,只显示了最重要的代码):
类注册控制器
这很好用,但有没有一种更简单的内置方法可以做到这一点,我没有找到?是的,有一种更简单的方法。制作一个新的初始值设定项,最好是config/initializers/develope.rb
,并在其中写入允许的参数。基本配置如下所示:
# frozen_string_literal: true
module DevisePermittedParameters
extend ActiveSupport::Concern
included do
before_action :configure_permitted_parameters
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
devise_parameter_sanitizer.permit(:account_update, keys: [:name])
end
end
DeviseController.send :include, DevisePermittedParameters
它允许模块化配置,允许自定义参数。你可以找到更多的细节。是的,有一个更简单的方法。制作一个新的初始值设定项,最好是config/initializers/develope.rb
,并在其中写入允许的参数。基本配置如下所示:
# frozen_string_literal: true
module DevisePermittedParameters
extend ActiveSupport::Concern
included do
before_action :configure_permitted_parameters
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
devise_parameter_sanitizer.permit(:account_update, keys: [:name])
end
end
DeviseController.send :include, DevisePermittedParameters
它允许模块化配置,允许自定义参数。您可以找到有关它的更多详细信息。如果您想要简单易用的,请尝试一下,
在应用程序控制器中添加以下代码段,该代码段将在强参数列表中添加您的name
属性
# app/controllers/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) << :name
end
#app/controllers/application_controller.rb
在\u操作之前:配置\u允许的\u参数,如果::设计\u控制器?
受保护的
def配置\u允许的\u参数
设计参数消毒剂。对于(:帐户更新)如果您正在寻找简单易用的,请尝试,
在应用程序控制器中添加以下代码段,该代码段将在强参数列表中添加您的name
属性
# app/controllers/application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) << :name
end
#app/controllers/application_controller.rb
在\u操作之前:配置\u允许的\u参数,如果::设计\u控制器?
受保护的
def配置\u允许的\u参数
为(:帐户更新)干杯。最后,我将它添加到应用程序\u控制器
中,而不是添加到初始化器中。将它添加到应用程序\u控制器
中会起到作用,但同时,它会使控制器变得笨拙。将其添加到单独的初始值设定项中,使其易于读取/配置,并保持控制器代码干净。不管怎样,最后一个电话是你的:)这难道不会让所有的控制器都在允许的参数中设置这些新字段吗?干杯。最后,我将它添加到应用程序\u控制器
中,而不是添加到初始化器中。将它添加到应用程序\u控制器
中会起到作用,但同时,它会使控制器变得笨拙。将其添加到单独的初始值设定项中,使其易于读取/配置,并保持控制器代码干净。无论如何,最后一个调用是你的:)这难道不会让所有的控制器在允许的参数中都有这些新字段吗?