- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我执行了以下代码
@user = User.find(current_user.id)
successfully_updated = if needs_password?(@user, params)
@user.update_with_password(params[:user])
else
# remove the virtual current_password attribute update_without_password
# doesn't know how to ignore it
params[:user].delete(:current_password)
@user.update_without_password(params[:user])
end
if successfully_updated
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
但 update_without_password 给出 false
并且数据库被回滚。我是否必须为 update_without_password 做些什么?
最佳答案
我刚刚解决了自己的问题。下面的代码应该像宣传的那样工作(在 Devise 的 wiki 页面上找到)。
def update
@user = User.find(current_user.id)
successfully_updated = if needs_password?(@user, params)
@user.update_with_password(params[:user])
else
params[:user].delete(:current_password)
@user.update_without_password(params[:user])
end
if successfully_updated
set_flash_message :notice, :updated
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
end
确保您还为“needs_password?”定义了私有(private)方法
def needs_password?(user, params)
(params[:user].has_key?(:email) && user.email != params[:user][:email])
|| !params[:user][:password].blank?
end
我的问题是我从“edit.html.erb”文件的表单中删除了“电子邮件”字段,所以“需要密码?”方法一直返回 true,因为 user.email 永远不会等于 nil。为了解决这个问题,我添加了一个检查 params[:user].has_key?(:email)
来查看散列中是否存在“email”。
FWIW,“update_without_password”与“update_with_password”的工作方式几乎相同,只是它在调用对象的“update_attributes”之前删除了“password”和“password_confirmation”参数,因此您不必这样做更多的东西。尝试向上游看一下,看看您是否真的在调用“update_without_password”。
关于ruby-on-rails - [Rails]update_without_password 不更新用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405598/
我执行了以下代码 @user = User.find(current_user.id) successfully_updated = if needs_password?(@user, param
我是一名优秀的程序员,十分优秀!