我試圖在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
Model類
class User < ActiveRecord::Base
attr_accessible :firstname
validates :firstname, :seven_name => true
end
所以如果字符串「你好「測試結果錯誤=>」字符串必須準確地爲7個字符「
但是,如果測試字符串「hello77」,它將被驗證成功。
它不應該首先從NameValidator中檢查並看到它有數字嗎?如果沒有,我怎麼能繼承工作在自定義驗證器?我是否需要在我的驗證器類中使用方法?一個例子,將不勝感激,我搜查了很多,但我找不到自定義驗證器的例子。
您可能想在'SevenNameValidator'的validate_each中使用'super'。 – oldergod