53

我正在尝试让我的自定义验证工作create。但是当我执行findthen时save,rails 将其视为create并运行自定义验证。如何使验证仅在创建新记录时才起作用,而不是在更新找到的记录时?

4

2 回答 2

101

在您的验证代码行上试试这个:

validate :custom_validation, on: :create

这指定仅对create操作运行验证。

来源:

ActiveModel/Validations/ClassMethods/validate@apidock.com

于 2012-05-25T03:09:04.577 回答
9

TL;博士; 完整示例:

class MyPerson < ActiveRecord::Base
  validate :age_requirement


  private

  def age_requirement
    unless self.age > 21 
      errors.add(:age, "must be at least 10 characters in length")
    end
  end

end

要让验证器仅在创建新对象时运行,您可以将示例的第 2 行更改为:validate :age_requirement, on: :create

仅在更新时:validate :age_requirement, on: :update

希望对下一个人有帮助!

于 2017-09-02T22:11:35.567 回答