我正在使用Devise和Ruby on Rails,我想设置一个用于编辑用户的视图,只有当我想要一个新密码时才需要提供当前密码。换句话说 - 如果我想更改我的姓名或生日,我可以简单地将密码字段留空,但如果我想更改密码,我希望有标准的设计行为。
我的编辑表单如下所示:
我尝试通过覆盖update_resource方法允许更新而不使用密码编写here:
protected
def update_resource(resource, params)
resource.update_without_password(params)
end
但是,如果不从current_password
删除params.require(:user).permit(...)
,我会收到以下错误:
我无法将其从允许的参数中删除,因为我想在密码更改的情况下使用它。
这样做的方法是什么?我正在考虑拆分视图并创建一个新的密码编辑表单以及一个用于密码编辑的控制器,但我更愿意将它们集中在一个地方。
答案 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