Пользовательская проверка не запускается, потому что мой рубин не прав - PullRequest
0 голосов
/ 03 февраля 2011

Это мучительно нубский вопрос, но я должен его задать. Я хочу, чтобы валидация отключалась, если конкретное поле, назовем его :token, не является конкретной строкой. Итак, я называю свою пользовательскую проверку:

validate :use_beta_token

А потом я определяю свой метод проверки

def use_beta_token
        errors.add(:token, "Incorrect beta token") if token not 'pizza'
end

Всякий раз, когда я устанавливаю токен в строку, которая не является "пиццей", и я проверяю с valid?, он возвращается true. Что я тут испортил? Я также попробовал if token !== 'pizza', но это тоже не работает. Я уверен, что ответ до боли очевиден, но я не могу его выкопать.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

try

errors.add(:token, "Incorrect beta token") unless token == 'pizza'

метод not работает подобно!, Это унарный логический оператор, а не оператор двоичного сравнения.

относительно того, как их записать, сделайте его кратким.См. руководство по направляющим для примеров.

0 голосов
/ 03 февраля 2011

Один из способов использования пользовательских валидаторов для Rails 3 - определить собственный класс Validator, который наследуется от ActiveModel :: Validator, затем реализовать метод validate и прикрепить ошибки следующим образом:

# define my validator
class MyValidator < ActiveModel::Validator
  # implement the method where the validation logic must reside
  def validate(record)
    # do my validations on the record and add errors if necessary
    record.errors[:token] << "Incorrect beta token" unless token == 'pizza'
  end
end

После того, как вы определили свой валидатор, вы должны затем включить его в свою модель, чтобы его можно было использовать, и применить его с помощью метода validates_with.

class ModelName
  # include my validator and validate the record
  include ActiveModel::Validations
  validates_with MyValidator
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...