Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在一个视图中编辑Desive user,并且仅对某些字段需要密码_Ruby On Rails_Forms_Devise - Fatal编程技术网

Ruby on rails 在一个视图中编辑Desive user,并且仅对某些字段需要密码

Ruby on rails 在一个视图中编辑Desive user,并且仅对某些字段需要密码,ruby-on-rails,forms,devise,Ruby On Rails,Forms,Devise,我正在使用Desive和Ruby on Rails,我想为编辑用户设置一个视图,在该视图中,我必须提供当前密码,如果我想有一个新密码。换句话说,如果我想更改我的姓名或生日,我可以简单地将密码字段留空,但如果我想更改密码,我希望有标准的设计行为。 我的编辑表单如下所示: 我试图通过重写update_资源方法来允许在没有密码的情况下进行更新: protected def update_resource(resource, params) resource.update_without_pa

我正在使用Desive和Ruby on Rails,我想为编辑用户设置一个视图,在该视图中,我必须提供当前密码,如果我想有一个新密码。换句话说,如果我想更改我的姓名或生日,我可以简单地将密码字段留空,但如果我想更改密码,我希望有标准的设计行为。

我的编辑表单如下所示:

我试图通过重写update_资源方法来允许在没有密码的情况下进行更新:

protected

def update_resource(resource, params)
  resource.update_without_password(params)
end
但是,如果不从
参数require(:user).permit(…)
中删除
当前密码,我将收到以下错误:

我不能从允许的参数中删除它,因为我想在密码更改时使用它

怎么做呢?我正在考虑拆分视图,创建一个新的表单用于密码编辑,以及一个用于密码编辑的控制器,但我更希望将所有内容都放在一个地方

用户的未知属性“当前密码”

该错误是有意义的,因为
当前\u密码
不是设备随附用户的默认属性之一。我也遇到过类似的问题,我在
attr\u accessor

user.rb
模型中,输入
attr\u访问器:当前密码
。这解决了错误,但是您需要调整如下参数以满足这两种情况

用户的未知属性“当前密码”

该错误是有意义的,因为
当前\u密码
不是设备随附用户的默认属性之一。我也遇到过类似的问题,我在
attr\u accessor

user.rb
模型中,输入
attr\u访问器:当前密码
。这解决了错误,但是您需要调整如下参数以满足这两种情况


我的回答解决问题了吗?是的,绝对解决!我写了一篇评论,感谢你,我想我没有点击“添加评论”---你的回答非常有帮助,直截了当:)我只做了一点升级,将“else”和“end”之间的代码替换为“super”:)很高兴听到这个消息!请随意接受我的答案:)我的答案解决问题了吗?是的,绝对!我写了一篇评论,感谢你,我想我没有点击“添加评论”---你的回答非常有帮助,直截了当:)我只做了一点升级,将“else”和“end”之间的代码替换为“super”:)很高兴听到这个消息!请随意接受我的回答:)
def update_resource(resource, params)
  if params[:user][:password].blank? && params[:user][:password_confirmation].blank?
    resource.update_without_password(some_params)
  else
    resource.update_with_password(some_params)
  end
end

def some_params
  params.require(:user).permit(--all params here with current_password also included--)
end