我已关注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
问题是创建一个新的用户,这个工作正常,两个密码必须存在,他们需要匹配,当我更新它需要我提供密码
例如,如果另一个控制器想要更改用户的任何字段,我必须提供密码,否则我将无法更新。
如何在创建模型或进行密码更新时如何制定一个只需要密码/密码_确认的协议?
答案 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