Ruby on rails 当前密码可以';更新设计帐户时不能为空

Ruby on rails 当前密码可以';更新设计帐户时不能为空,ruby-on-rails,ruby,devise,user-accounts,Ruby On Rails,Ruby,Devise,User Accounts,我正在使用designe,我想允许用户更新他的帐户(电子邮件和密码)。因此,当我单击“编辑用户注册路径”时,我会看到一个页面,用户可以在其中更改电子邮件和密码。但在提交此更新表单时,我不断收到以下消息: 1 error prohibited this user from being saved: × Current password can't be blank 在我的应用程序控制器中,我有 def configure_permitted_parameters devise_param

我正在使用
designe
,我想允许用户更新他的帐户(电子邮件和密码)。因此,当我单击“编辑用户注册路径”时,我会看到一个页面,用户可以在其中更改电子邮件和密码。但在提交此
更新
表单时,我不断收到以下消息:

1 error prohibited this user from being saved: ×
Current password can't be blank
在我的
应用程序控制器中,我有

def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :surname, :email, :user_name, :terms_of_service, :password, :password_confirmation) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation) }
end

有人可以解释?

默认情况下,Desive在
编辑用户注册
上有三个密码字段:密码、密码确认和当前密码:


任何更改都需要当前_密码;如果不应更改密码,则其他两个可以留空。

将此代码放入您的用户模型中:

def update_with_password(params, *options)
    current_password = params.delete(:current_password)

    if params[:password].blank?
      params.delete(:password)
      params.delete(:password_confirmation) if params[:password_confirmation].blank?
    end

    result = if params[:password].blank? || valid_password?(current_password)
      update_attributes(params, *options)
    else
      self.assign_attributes(params, *options)
      self.valid?
      self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
      false
    end

    clean_up_passwords
    result
end

我不知道你是否得到了解决方案,但你可以做一件简单的事情:

创建一个user_控制器,然后创建一个带有密码和密码确认的user_参数,以及另一个不带密码和密码确认的user_参数(我使用了这个名称:user_params_,不带密码)

在您的更新中,您将检查密码是否存在,是的,您将使用user_params,如果不是,则用户_params_不带密码

代码如下:

def update

    if params[:user][:password].present?
      params = user_params
    else
      params = user_params_without_password
    end

def user_params
      params.require(:user).permit( params...

def user_params_without_password
  params.require(:user).permit( params without password

我希望此提示可以帮助您:)

默认情况下,Desive需要密码来更新用户


这里有一个页面,上面有更改此行为的Official说明:

添加
当前\u密码
字段后,我收到以下消息:
未定义的局部变量或方法未确认\u电子邮件
。此错误来自何处?@user1611830错误具体在何处引发?什么文件,什么行?在这个文件中
method\u missing(gem)activemodel-4.0.0/lib/active\u model/attribute\u methods.rb
中的
method\u missing
method
匹配?属性_缺失(匹配,*args,&block):super
@user1611830请用新问题更新您的问题,并添加完整的堆栈跟踪,以及您的编辑视图。好的,我抓到了,我的Deave用户模型中有一些
:confirmable
!所以我删除了它,一切正常!在模型中假装有
params
是正确的吗?我以为他们只是在控制器的上下文中。没关系,这个答案解决了我的问题。