使用用户模型中的特定方法跳过密码验证

时间:2013-08-11 13:45:21

标签: ruby-on-rails activerecord

在我的user模型中,我验证了passwordinstance method这样:

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

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

正如你在这个方法中看到的,我调用save!方法,在更改某些字段后保存用户,所以我想跳过验证密码而不是其他验证只有当我在用户实例上调用my_method 时,我该怎么办呢?谢谢

2 个答案:

答案 0 :(得分:2)

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

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

我希望这可以帮助你:)。

答案 1 :(得分:-2)

你可以用2种方法做到。

model.save(:validate => false)

请参阅herehere

OR

跳过回叫

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

API Doc