Я пытался создать пользовательский класс проверки в Ruby on Rails, который можно развернуть. Однако я не могу заставить его использовать проверку как подкласса, так и суперкласса. Этого пример пояснит, что я пытаюсь достичь:Наследование с помощью пользовательских валидаторов Ruby on Rails
Супер-класс
class NameValidator < ActiveModel::EachValidator
def validate_each (record, attribute, value)
#Checks to see if the incoming string is free of any numerical characters
if value.match(/\A[+-]?\d+\Z/)
record.errors[attribute] << "String must contain no numerical characters"
end
end
end
подклассу
class SevenNameValidator < NameValidator
def validate_each (record, attribute, value)
# Checks and only allows 7 character strings to be validated
if value.length != 7
record.errors[attribute] << "String must be 7 characters exactly"
end
end
end
класса Модели
class User < ActiveRecord::Base
attr_accessible :firstname
validates :firstname, :seven_name => true
end
так, если строка " hello "проверяется результирующая ошибка =>" Строки должны быть 7 символов точно "
Однако, если строка «hello77» протестирована, она успешно проверена.
Не следует ли сначала проверять с NameValidator и видеть, что у него есть цифры? Если нет, как я могу получить наследование для работы в пользовательских валидаторах? Нужно ли использовать методы в моих классах валидатора? Пример будет оценен, я много искал, но я не могу найти пример для пользовательских валидаторов.
Возможно, вы захотите использовать 'super' в validate_each' SevenNameValidator'. – oldergod