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
是正确的吗?我以为他们只是在控制器的上下文中。没关系,这个答案解决了我的问题。