Rails验证字段

时间:2012-11-21 18:09:43

标签: ruby-on-rails ruby

我已关注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

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

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

如何在创建模型或进行密码更新时如何制定一个只需要密码/密码_确认的协议?

2 个答案:

答案 0 :(得分:1)

如果您使用的是rails3,则可以skip validations。来自文档:

  

以下方法跳过验证,并将对象保存到   数据库无论其有效性如何。它们应该与之一起使用   小心。

     
      
  • 递减!
  •   
  • decrement_counter
  •   
  • 增量<!/ LI>   
  • increment_counter
  •   
  • 肘节<!/ LI>   
  • 触摸
  •   
  • update_all
  •   
  • update_attribute
  •   
  • update_column
  •   
  • update_counters
  •   
     

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

基本上,使用find找到合适的用户,更新你想要的任何字段,user.save!(:validate=>false),鲍勃是你的叔叔!

答案 1 :(得分: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