Валидация пользовательских Rails выдает неопределенную ошибку метода - PullRequest
2 голосов
/ 02 июня 2011

Мне нужно проверить, что поле является положительным значением, и я написал небольшой метид в lib / validations.rb, который сделал именно это и добавил его в мою модель.Однако, теперь один из моих тестов rspec терпит неудачу, жалуясь ...

NoMethodError: неопределенный метод '<' для nil: NilClass "</p>

... когда значениеЯ также добавил validates_presence_of :price к моей модели, выше моего пользовательского метода validates_positive_or_zero.

Я бы подумал, что сначала будет вызван validates_presence_of, а когда поле равно nil, то ононе будет выполнять дальнейшую проверку. Должен ли я изменить свой метод validates_positive_or_zero, чтобы проверить, существует ли поле, чтобы исправить это? Может кто-нибудь дать мне некоторое представление о том, что происходит?

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Rails уже имеет это:

http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_numericality_of

Использование: more_than => 0

0 голосов
/ 02 июня 2011

Все средства проверки выполняются независимо от порядка, в котором они определены. Таким образом, массив ошибок заполняется всеми ошибками проверки, что позволяет конечному пользователю исправлять все ошибки, а не только одну за раз. *

Так что да, вам нужно проверить, существует ли значение для поля и можно ли сравнить это значение с числом. Например, вам, вероятно, также необходимо принять во внимание, что значение может быть чем угодно, кроме числа - пустая строка будет вероятным значением - что также приведет к ошибке.

Но все это академично, потому что, как указал Стивен, просто используйте validates_numericality_of :field, ::greater_than_or_equal_to => 0

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