Rails 2.3.11 - 仅在创建时验证

时间:2012-05-25 01:43:33

标签: ruby-on-rails ruby-on-rails-2

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

2 个答案:

答案 0 :(得分:68)

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

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

validate :custom_validation, :on => :create

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

的链接

答案 1 :(得分:4)

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

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

仅限更新:validate :age_requirement, on: :update

希望能帮助下一个人!