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控制器
中会起到作用,但同时,它会使控制器变得笨拙。将其添加到单独的初始值设定项中,使其易于读取/配置,并保持控制器代码干净。无论如何,最后一个调用是你的:)这难道不会让所有的控制器在允许的参数中都有这些新字段吗?