在一个视图中编辑设计用户并仅在某些字段中需要密码

时间:2017-06-01 16:36:07

标签: ruby-on-rails forms devise

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

我的编辑表单如下所示: view

我尝试通过覆盖update_resource方法允许更新而不使用密码编写here

protected

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

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

error

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

这样做的方法是什么?我正在考虑拆分视图并创建一个新的密码编辑表单以及一个用于密码编辑的控制器,但我更愿意将它们集中在一个地方。

1 个答案:

答案 0 :(得分:2)

  

用户

的未知属性'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