Ruby on rails 更新用户名不在设备中工作

Ruby on rails 更新用户名不在设备中工作,ruby-on-rails,devise,Ruby On Rails,Devise,我正在使用Desive和Rails 4 当我去编辑一个用户并修改用户名时,我点击了update,但是新的用户名在DB中没有被修改。更新密码和电子邮件都能正常工作,只是用户名似乎受到影响。我发现了一个问题,但据我所知,我没有可能导致此问题的“保存前”操作 在rails控制台中,这是在执行更新操作之前看到的。首先: => #<User id: 1, email: "blueduckyy@example.com", created_at: "2017-03-03 19:10:48"

我正在使用Desive和Rails 4

当我去编辑一个用户并修改用户名时,我点击了update,但是新的用户名在DB中没有被修改。更新密码和电子邮件都能正常工作,只是用户名似乎受到影响。我发现了一个问题,但据我所知,我没有可能导致此问题的“保存前”操作

在rails控制台中,这是在执行更新操作之前看到的。首先:

    => #<User id: 1, email: "blueduckyy@example.com", created_at: "2017-03-03 19:10:48", updated_at: "2017-05-18 00:52:28", username: "blueduckyy", avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil, avatar_updated_at: nil>
在浏览器中,我得到一个响应,表示用户已成功更新

然后,如果我再次执行User.first,则得到与上面相同的结果

这是我的应用程序控制器中的内容:

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
如果相关,我的注册控制器,我将覆盖Desive:

    class Users::RegistrationsController < Devise::RegistrationsController

      protected

      def update_resource(resource, params)
        resource.update_without_password(params)
      end

      def after_update_path_for(resource)
        user_path(resource)
      end

    end
类用户::注册控制器<设计::注册控制器
受保护的
def更新_资源(资源,参数)
资源。在不使用密码的情况下更新\u(参数)
结束
更新后的def路径(资源)
用户路径(资源)
结束
结束
和我的用户模型:

    class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable, :validatable

             validates :username, presence: true, length: { maximum: 15 }, uniqueness: {case_sensitive: false}

       has_attached_file :avatar, :styles => { :medium => "300x300>",:small => "200x200", :thumb => "100x100" }, :default_url => "/images/:style/missing.png"
       validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
class用户{:medium=>“300x300>”,:small=>“200x200”,:thumb=>“100x100”},:默认url=>“/images/:style/missing.png”
验证\u附件\u内容\u类型:头像,:内容\u类型=>/\Aimage\/.\Z/

结束在注册\u控制器中。rb将此

class Users::RegistrationsController < Devise::RegistrationsController
 before_filter :configure_permitted_parameters

 def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up) do |user_params|
   user_params.permit(:first_name, :last_name, :username,
    :email, :password, :password_confirmation)
  end
  devise_parameter_sanitizer.permit(:account_update) do |user_params|
   user_params.permit(:first_name, :last_name, :username,
    :email, :password, :password_confirmation, :avatar)
  end
 end
end
类用户::注册控制器<设计::注册控制器
前\u过滤器:配置\u允许的\u参数
def配置\u允许的\u参数
设计参数消毒剂。允许(:注册)做用户参数|
用户参数许可证(:名字,:姓氏,:用户名,
:电子邮件,:密码,:密码(确认)
结束
设计参数消毒器。允许(:帐户更新)执行用户参数|
用户参数许可证(:名字,:姓氏,:用户名,
:email,:password,:password\u confirmation,:avatar)
结束
结束
结束

一个相对干净的解决方案(适用于Rails 6)是将其添加到您的
应用程序\u控制器中

在\u操作之前:配置\u设计\u允许的\u参数,如果::设计\u控制器?
def配置\u设计\u允许的\u参数,
设计参数消毒器。许可证(:注册,密钥:[:用户名])
设计参数消毒器。许可证(:帐户更新,密钥:[:用户名])
结束

您是否在
应用程序控制器中的
操作:配置\u允许的\u参数之前设置了
?@jdgray是的!
class Users::RegistrationsController < Devise::RegistrationsController
 before_filter :configure_permitted_parameters

 def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up) do |user_params|
   user_params.permit(:first_name, :last_name, :username,
    :email, :password, :password_confirmation)
  end
  devise_parameter_sanitizer.permit(:account_update) do |user_params|
   user_params.permit(:first_name, :last_name, :username,
    :email, :password, :password_confirmation, :avatar)
  end
 end
end