Я пытался создать собственный класс валидатора в 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
поэтому, если проверяется строка «привет», возникает ошибка => «Строки должны содержать ровно 7 символов»
Однако если строка «hello77» проверяется, она проходит успешную проверку.
Разве он не должен сначала проверить NameValidator и увидеть, есть ли цифры? Если нет, как я могу заставить наследование работать в пользовательских валидаторах? Нужно ли мне использовать методы в моих классах валидатора? Буду признателен за пример, я много искал, но не могу найти пример для пользовательских валидаторов.
super
в validate_each дляSevenNameValidator
. - person oldergod   schedule 24.06.2013