Ruby on rails 许可:名字,但不保存到DB,带有设备注册

Ruby on rails 许可:名字,但不保存到DB,带有设备注册,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 5,我试图在注册帐户时允许:firstname,但参数没有通过,我做错了什么 我已经将:firstname字符串迁移到数据库中 #受保护 #如果要允许使用额外的参数,请将它们附加到消毒液中。 #def配置\注册\参数 #设计参数消毒器。许可证(:注册,键:[:属性,:名字]) #结束 #如果要允许使用额外的参数,请将它们附加到消毒液中。 #def配置\帐户\更新\参数 #设计\u参数\u消毒器。允许(:帐户\u更新,键:[:属性,:名字]) #结束 在designe中对自定义属性使用sanitize

我试图在注册帐户时允许:firstname,但参数没有通过,我做错了什么

我已经将:firstname字符串迁移到数据库中

#受保护
#如果要允许使用额外的参数,请将它们附加到消毒液中。
#def配置\注册\参数
#设计参数消毒器。许可证(:注册,键:[:属性,:名字])
#结束
#如果要允许使用额外的参数,请将它们附加到消毒液中。
#def配置\帐户\更新\参数
#设计\u参数\u消毒器。允许(:帐户\u更新,键:[:属性,:名字])
#结束

在designe中对自定义属性使用
sanitize
时,我们可能会遇到一些问题。请跟着这个
.

您已经阅读了此代码,要执行此操作,只需取消注释
配置注册参数
方法并将属性添加到
,类似于下面的代码

# protected

  # If you have extra params to permit, append them to the sanitizer.
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:firstname])
  end

  # If you have extra params to permit, append them to the sanitizer.
  # def configure_account_update_params
  #   devise_parameter_sanitizer.permit(:account_update, keys: [:attribute, :firstname])
  # end

你需要做两件事:

  • 生成注册控制器。您可以使用以下命令执行此操作:
  • routes.rb
    文件中,添加以下内容:
  • 注册\u controller.rb
    中,允许额外的参数:
  • 
    类用户::注册控制器<设计::注册控制器
    在\u操作之前:配置\u注册\u参数,仅:[:创建]
    受保护的
    #如果要允许使用额外的参数,请将它们附加到消毒液中。
    def配置\注册\参数
    设计参数消毒剂。许可证(:注册,密钥:[:名字])
    结束
    结束
    
    参考:


    非常感谢!这就解决了问题@蒂莫菲,我很高兴能帮上忙!接下来,不仅要取消对该方法的注释,还要取消对\u action:configure\u sign\u up \u参数之前的
    的注释,仅文件顶部的:[:create]
    ,这就是我所缺少的。
    rails g devise:controllers users -c=registrations
    
    devise_for :users, controllers: { registrations: 'users/registrations' }
    
    
    class Users::RegistrationsController < Devise::RegistrationsController
      before_action :configure_sign_up_params, only: [:create]
    
      protected
    
      # If you have extra params to permit, append them to the sanitizer.
      def configure_sign_up_params
        devise_parameter_sanitizer.permit(:sign_up, keys: [:firstname])
      end
    end