Получение пользовательских валидаторов для работы с гемом client_side_validations - PullRequest
1 голос
/ 17 мая 2011

Я написал собственный валидатор и ищу способы заставить его работать с гемом client_side_validations.Прямо сейчас он все еще позволяет мне отправить свою форму, а затем я получаю окно с ошибкой и сообщения об ошибке.Мне было интересно, есть ли способ изменить гем или как мне нужно отформатировать проверку.

Вот последний вопрос, который я задал о том, как настроить мою проверку: Написание собственного валидатора в Rails 3

Это лучший способ сделать это для выражения максимального количества словс точки зрения регулярного выражения?

Ответы [ 3 ]

2 голосов
/ 18 мая 2011

В вики есть довольно подробная информация о том, как писать собственные валидаторы: 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" }

И это фактически дает вам то же самое.

0 голосов
/ 18 мая 2011

Я только что добавил упомянутую функциональность. Если вы укажете свой Gemfile на главную ветку на Github, вы сможете условно принудительно использовать валидаторы, как я описал.

0 голосов
/ 18 мая 2011

Еще одна вещь, регулярное выражение, которое у вас есть, может работать или не работать в Javascript.Javascript и Ruby имеют разные движки регулярных выражений, и хотя большинство вещей работают в обоих случаях, не все.Поэтому вам, возможно, придется проверить выражение в javascript, чтобы увидеть, получаете ли вы нужные результаты.Если нет, то вам понадобится другое регулярное выражение в валидаторе javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...