rails 3.1 partial_updates似乎不适用于密码

时间:2012-04-08 10:18:57

标签: ruby-on-rails passwords

我有一个带有密码属性的用户模型,该属性被保存为password_digest。 我想要做的是将编辑用户页面和编辑密码页面分开,以便 管理员无需在每次需要更改其他内容时输入密码。为此,我做了一个额外的行动/观点。

我的问题是,当我更新用户信息时,我会收到密码验证错误 我在表单中没有密码字段。这导致我得出结论:partial_updates不能使用密码属性(因为我已经在控制台中测试了它已启用,并且它是)

这是我做错了什么,还是应该以不同的方式处理?

2 个答案:

答案 0 :(得分:0)

只有在密码被更改时才需要验证密码。如果没有更改,则应跳过password字段的验证。

Railscasts.com episode #41向您展示了如何执行此操作。

答案 1 :(得分:0)

与@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伪属性。