【问题标题】:rails 3.1 partial_updates doesn't seem to work with passwordrails 3.1 partial_updates 似乎不适用于密码
【发布时间】:2012-04-21 04:00:37
【问题描述】:
我有一个带有密码属性的用户模型,它被保存为密码摘要。
我想要做的是将编辑用户页面和编辑密码页面分开,这样
管理员每次需要更改其他内容时都不需要输入密码。为此,我做了一个额外的动作/视图。
我的问题是,当我更新用户信息时,即使密码验证错误
我在表单中没有密码字段。这使我得出的结论是 partial_updates 不能使用密码属性(因为我已经在控制台中测试它已启用,并且确实如此)
这是我做错了什么,还是我应该以不同的方式处理?
【问题讨论】:
标签:
ruby-on-rails
passwords
【解决方案1】:
类似于@normalocity 提到的railscasts 方法,但不需要在控制器中设置伪属性,我们这样做(本质上取自restful_authentication):
attr_accessor :password
validates :password,
:length => { :minimum => 8 },
:confirmation => true,
:presence => true,
:if => :password_required?
def password_required?
password_digest.blank? || !password.blank?
end
基本上,我们假设如果password_digest 尚未设置(对于新记录),或者如果password 伪属性已设置,那么这意味着密码正在更改并且验证必须运行。所以我们不需要像在 railscasts 剧集中那样设置 updating_password 伪属性。
【解决方案2】:
只有在更改密码时才需要验证密码。如果未更改,则应跳过对 password 字段的验证。
Railscasts.com episode #41 向您展示了如何做到这一点。