在Rails 3中,当我不尝试更新密码时,如何跳过密码字段的验证?

San*_*jay 20 ruby-on-rails ruby-on-rails-3

我的用户模型包含:name,:email和:password字段.所有3个都有长度验证."更新帐户"网页允许用户更新其姓名和电子邮件地址,但不能更新密码.提交时,params [:user]是

{"name"=>"Joe User", "email"=>"user@example.com"}
Run Code Online (Sandbox Code Playgroud)

请注意,没有"密码"键,因为表单不包含此类输入字段.

我打电话的时候

@user.update_attributes(params[:user])
Run Code Online (Sandbox Code Playgroud)

密码验证失败.但是,由于我没有尝试更新密码,因此我不希望密码验证在此更新上运行.当params [:user]不包含"密码"键时,我很困惑为什么密码验证正在运行.

请注意,我希望在其他地方有一个单独的网页,允许用户更新他的密码.对于该提交,密码验证应该运行.

谢谢.

alt*_*ive 28

我的应用程序做了这样的事情

attr_accessor :updating_password

validates_confirmation_of :password, :if => should_validate_password?

def should_validate_password?
  updating_password || new_record?
end
Run Code Online (Sandbox Code Playgroud)

因此您必须model.updating_password = true进行验证,并且您不必在创建时执行此操作.

我在http://railscasts.com/episodes/41-conditional-validations的一个很好的railscast中找到了这个