【问题标题】:Editing Devise user in one view and requiring password only for some fields在一个视图中编辑设计用户并且仅对某些字段要求密码
【发布时间】:2017-06-01 16:36:06
【问题描述】:

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

我的编辑表单如下所示:

我试图通过覆盖 update_resource 方法来允许没有密码的更新 here

protected

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

但是,如果不从 params.require(:user).permit(...) 中删除 current_password,我会收到以下错误:

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

有什么方法可以做到这一点?我正在考虑拆分视图并创建一个用于密码编辑的新表单以及一个用于密码编辑的控制器,但我希望将它们全部放在一个地方。

【问题讨论】:

  • 我的回答能解决问题吗?
  • 是的,绝对!我写了一条评论,感谢你,我想我没有点击“添加评论”-_-你的回答非常有帮助,直截了当:)我只做了一点升级,替换了“else”之间的代码" 和 "end" 只用 "super" :)
  • 很高兴听到!随意接受我的回答:)

标签: ruby-on-rails forms devise


【解决方案1】:

用户的未知属性“current_password”

这个错误是有道理的,因为current_password 不是Devise 附带的用户可用的默认属性之一。我遇到了类似的问题,我在attr_accessor的帮助下解决了它

user.rb 模型中放入attr_accessor :current_password。这解决了错误但是您需要像下面这样调整参数以满足这两种情况

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多