我希望能够更新我的用户信息,而不必让用户在每次编辑任何其他属性时都设置密码。
我目前的验证是:
validates :password, presence: true, length: { minimum: 8 }
validates :password_confirm, presence: true
我怎样才能使这个有条件?如果密码和密码确认属性在参数中,那么只需要这些验证是很聪明的。我可以使用一些关于如何实现这一点的想法。谢谢。
我希望能够更新我的用户信息,而不必让用户在每次编辑任何其他属性时都设置密码。
我目前的验证是:
validates :password, presence: true, length: { minimum: 8 }
validates :password_confirm, presence: true
我怎样才能使这个有条件?如果密码和密码确认属性在参数中,那么只需要这些验证是很聪明的。我可以使用一些关于如何实现这一点的想法。谢谢。
我认为应该这样做:
validates :password, presence: true, length: { minimum: 8 }
validates :password_confirm, presence: true, :if => Proc.new { |a| a.password_changed? || a.new_record? }
有关方法的更多信息,请参阅ActiveModel::Dirty_changed?
上的文档。password
每次更改属性时运行存在验证应该没有问题,因为这将持续存在于数据库中,因此它将始终通过(而password_confirm
不会持续存在,因此需要条件)。