3

在我的user模型中password,我有这样的验证instance method

class User < ActiveRecord::Base
  validate :email ......
  validates :password, length: { minimum: 6 }

  def my_method
    # .....
    # save!
  end
end

正如您在此方法中看到的那样,我调用了save!在更改某些字段后保存用户的方法,所以我只想在调用用户实例时跳过密码验证而不是其他验证,我该怎么做请 ?谢谢你my_method

4

2 回答 2

2

如果有人很有趣,我会找到解决方案,我只是添加attr_accessor :skip_password_validation到我的模型中,然后我在密码验证中添加一个条件,当我使用用户模型的实例validates :password, length: { minimum: 6 }, unless: :skip_password_validation调用控制器时,我将上面的这个属性设置为true。就是这样,用户模型如下所示:my_method

class User < ActiveRecord::Base
  validate :email ......
  validates :password, length: { minimum: 6 }, unless: :skip_password_validation
  attr_accessor :skip_password_validation

  def my_method
    # .....
    # save!
  end
end

在我调用user.my_method之前的控制器中,我只需添加以下行:。user.skip_password_validation = true

我希望这对你有帮助:)

于 2013-08-11T14:58:48.343 回答
-3

您可以使用 2 种方法来完成。

model.save(:validate => false)

这里这里

或者

跳过回调

skip_callback :validate, :before, :check_membership, :if => lambda { self.age > 18 }

API文档

于 2013-08-11T14:02:22.540 回答