В вики есть довольно подробная информация о том, как писать собственные валидаторы: https://github.com/bcardarella/client_side_validations/wiki/Custom-Validators
Вам необходимо следовать руководству в вики, чтобы написать валидатор Rails таким образом, чтобы он работал сClientSideValidations драгоценный камень.Например, если бы я использовал валидатор для вашего другого поста, я написал бы его так:
class WordLimitValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
object.errors.add(attribute, :word_limit, options.merge(:value => value))
end
end
end
Затем вам нужно добавить сообщение об ошибке для: word_limit в ваш файл en.yml:
# config/locales/en.yml
en:
errors:
messages:
word_limit: "is not formatted properly"
Наконец, вам нужно добавить валидатор для Javascript.Я обычно создаю новый файл с именем rails.validations.custom.js. Это соглашение, которое я использовал, поскольку я не хочу возиться с основным файлом.
// rails.validations.custom.js
clientSideValidations.validators.local['word_limit'] = function(element, option) {
if (!/^(?:\b\w+\b[\s\r\n]*){1,100}$/.test(element.val())) {
return options.message;
}
});
И это должно быть сделано,Если вы копируете / вставляете, возможно, я допустил некоторые синтаксические ошибки, потому что делал это изо всех сил.
Если честно, почему бы просто не использовать валидатор формата Rails?Вы можете сделать это в своей модели:
validates :body, :format => { :with => /^(?:\b\w+\b[\s\r\n]*){1,100}$/, :message => "is not formatted properly" }
И это фактически дает вам то же самое.