Rails 3 - передать параметр в пользовательский метод проверки - PullRequest
4 голосов
/ 26 мая 2011

Я хочу передать значение для пользовательской проверки. В качестве теста я сделал следующее:

validate :print_out, :parameter1 => 'Hello'

С этим:

def print_out (input="blank")
  puts input
end

При создании объекта или сохранении объекта вывод будет пустым. Однако, если вызывается напрямую:

object.print_out "Test"

Вместо этого выводится тест. Вопрос в том, почему мой параметр не проходит должным образом?

Ответы [ 2 ]

11 голосов
/ 29 мая 2011

Внутри каталога config \ initializers \ вы можете создавать свои собственные проверки.В качестве примера давайте создадим валидацию 'validates_obj_length.'Не очень полезная проверка, но приемлемый пример:

Создайте файл obj_length_validator.rb в каталоге config \ intializers \.можно использовать очень чистый:

validates_obj_length :content, :length => 5

По сути, мы повторно открываем класс ActiveRecord :: Base и реализуем новую суб-проверку.Мы используем оператор splat (*), чтобы принять массив аргументов.Затем мы извлекаем хэш опций в нашу переменную 'options'.Наконец мы реализуем нашу валидацию (и).Это позволяет использовать валидацию с любой моделью в любое время и оставаться сухим!

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

Вы можете попробовать

validate do |object_name|
  object_name.print_out "Hello"
end

Вместо вашей проверки: print_out,: parameter1 => 'Hello'.

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