Написание собственного валидатора в Rails 3 - PullRequest
2 голосов
/ 17 мая 2011

Я пытаюсь написать собственный валидатор, который будет проверять количество слов, введенных в текстовое поле.

Я пытался следовать примеру в эпизоде ​​Railscasts 211 - http://railscasts.com/episodes/211-validations-in-rails-3

Поэтому я создал файл /lib/word_limit_validator.rb и скопировал в тот же код из учебника.Я знаю, что этот код не учитывает количество слов, я просто пытаюсь использовать его, потому что я знаю, как он должен себя вести.

class WordLimitValidator < ActiveModel::EachValidator  
  def validate_each(object, attribute, value)  
    unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i  
      object.errors[attribute] << (options[:message] || "is not formatted properly")  
    end  
  end  
end

Вот строка, которую я использовал в своей проверке:

  validates :body, :presence => true,
                   :word_limit => true

Когда я попытался загрузить форму, я получил следующую ошибку:

Неизвестный валидатор: 'word_limit'

Как получить рельсыузнать мой валидатор?

Спецификация системы: Mac OS 10.6.7 Rails 3.0.4 ruby ​​1.9.2p136

Ответы [ 2 ]

10 голосов
/ 28 февраля 2012

Вы также можете создать каталог app / validators в вашем проекте rails и поместить туда свои собственные валидаторы. Таким образом, они будут автоматически загружены.

1 голос
/ 17 мая 2011

Файлы в lib / больше не загружаются в Rails.Итак, у вас есть несколько вариантов.

  • Вы можете добавить lib к вашим путям автозагрузки в вашем приложении. Rb:
    config.autoload_paths += %W( #{config.root}/lib )
  • Вы можете включить, добавив файл с помощьючто-то вроде конфигурации / инициализаторов: require File.join( Rails.root, 'lib', 'word_limit_validator')
  • Если вам нужно только одно место, вы можете просто поместить его в тот же файл, что и ваша модель.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...