0

我已经关注了http://ruby.railstutorial.org/

class User < ActiveRecord
  attr_accessible ..., :password, :password_confirmation
  has_secure_password

  validates :password, :presence => true,
                       :length => { :minimum => 6 }
  validates :password_confirmation, :presence => true

  ....
end

问题是创建一个新用户这工作正常,两个密码都必须存在并且它们需要匹配,当我更新它需要我提供密码

例如,如果另一个控制器想要更改用户的任何字段,我必须提供密码,否则我将无法更新。

在创建模型或进行密码更新时,我如何制定一个只需要密码/密码确认的条件?

4

2 回答 2

1

如果您使用的是 rails3,则可以跳过验证。从文档:

以下方法跳过验证,并将对象保存到数据库中而不管其有效性。应谨慎使用它们。

  • 减量!
  • 递减计数器
  • 增量!
  • 增量计数器
  • 切换!
  • 触碰
  • 全部更新
  • 更新属性
  • 更新列
  • 更新计数器

:validate => false请注意,如果作为参数传递,save 还可以跳过验证。应谨慎使用此技术。

基本上,用于find查找合适的用户,更新您想要的任何字段user.save!(:validate=>false),并且 Bob 是您的叔叔!

于 2012-11-21T18:15:54.020 回答
1

Rails 支持条件验证,例如在您的用户模型中

validates :password_confirmation, :presence => true, :if => :new_password

def new_password
  current_user and current_user.changing_password?
end

您需要在方法中弄清楚new_password当您想要验证时如何判断任何条件为真。

请参阅:http ://railscasts.com/episodes/41-conditional-validations

于 2012-11-21T18:33:42.890 回答