4

我正在尝试在我的 Rails 应用程序中为书籍编写模型,并且我想验证 isbn 属性,但是 ISBN 有两种可能的长度:10 和 13。我如何使用验证来确保给定的 isbn 是 10还是 13 个数字长?

我考虑过使用一个范围:

validates :isbn, length: { minimum: 10, maximum: 13 }

但如果它是 11 或 12 个数字,它 { should_not be_valid }。

有没有办法做到这一点?

4

2 回答 2

5

您可以为此目的使用自定义验证器:

class Book < ActiveRecord::Base
  attr_accessible :isbn

  validate :check_length

  def check_length
    unless isbn.size == 10 or isbn.size == 13
      errors.add(:isbn, "length must be 10 or 13") 
    end
  end
end
于 2013-04-18T06:42:59.703 回答
0

您需要创建一种新方法来验证一个长度或另一个。

用于验证:

validate :isbn_length

定义此验证

def isbn_length
  if isbn.length !== 10 || 13
    errors.add(:isbn, "ISBN should be 10 or 13 characters long")
  end
end
于 2013-04-18T06:51:57.590 回答