Rails 2.3.11 - 仅在创建时验证

opr*_*ogo 33 ruby-on-rails ruby-on-rails-2

我正在尝试让我的自定义验证工作create.但是,当我做了find,然后save,轨道把它当作create和运行自定义验证.如何在仅在更新找到的记录时创建新记录时才能获得验证?

Ton*_*nys 71

您的问题标题指定了rails 2.3.11,但您的标记显示了rails 3.1.我将标题作为您需要的实际版本.

在您的验证码上尝试此操作:

validate :custom_validation, :on => :create
Run Code Online (Sandbox Code Playgroud)

这指定仅对操作运行验证create.这是apidocs的链接

  • 也适用于Rails 5.0.0.1. (4认同)

Mat*_*att 6

TL; DR; 完整示例:

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
Run Code Online (Sandbox Code Playgroud)

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

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

希望对下一个人有帮助!