0

我希望能够更新我的用户信息,而不必让用户在每次编辑任何其他属性时都设置密码。

我目前的验证是:

  validates :password, presence: true, length: { minimum: 8 }
  validates :password_confirm, presence: true

我怎样才能使这个有条件?如果密码和密码确认属性在参数中,那么只需要这些验证是很聪明的。我可以使用一些关于如何实现这一点的想法。谢谢。

4

1 回答 1

0

我认为应该这样做:

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不会持续存在,因此需要条件)。

于 2012-11-18T23:57:21.453 回答