我正在尝试在我的 Rails 应用程序中为书籍编写模型,并且我想验证 isbn 属性,但是 ISBN 有两种可能的长度:10 和 13。我如何使用验证来确保给定的 isbn 是 10还是 13 个数字长?
我考虑过使用一个范围:
validates :isbn, length: { minimum: 10, maximum: 13 }
但如果它是 11 或 12 个数字,它 { should_not be_valid }。
有没有办法做到这一点?
我正在尝试在我的 Rails 应用程序中为书籍编写模型,并且我想验证 isbn 属性,但是 ISBN 有两种可能的长度:10 和 13。我如何使用验证来确保给定的 isbn 是 10还是 13 个数字长?
我考虑过使用一个范围:
validates :isbn, length: { minimum: 10, maximum: 13 }
但如果它是 11 或 12 个数字,它 { should_not be_valid }。
有没有办法做到这一点?
您可以为此目的使用自定义验证器:
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
您需要创建一种新方法来验证一个长度或另一个。
用于验证:
validate :isbn_length
定义此验证
def isbn_length
if isbn.length !== 10 || 13
errors.add(:isbn, "ISBN should be 10 or 13 characters long")
end
end