Прежде всего, позвольте мне сказать, что я вернулся к Rails (играл с ним время или два, но заставлял себя написать полный проект с ним сейчас, начатый вчера).Проверка модели собственности больше, чем другая
Теперь я пытаюсь проверить, что свойство модели (терминология?) Больше, чем другое. Это оказалось идеальным экземпляром для validates_numericality_of
с опцией greater_than
, но, увы, это вызывает ошибку, указывающую мне greater_than expects a number, not a symbol
. Если я попытаюсь привить этот символ .to_f
, то я получу ошибку undefined method
.
Вот что я в итоге сделал, и мне любопытно, есть ли лучший способ. Это просто простая система управления релизами проекта, у нас есть только основные/незначительные релизы (одноточечные), поэтому float чувствовал, что это правильное решение здесь.
class Project < ActiveRecord::Base
validates_numericality_of :current_release
validates_numericality_of :next_release
validate :next_release_is_greater
def next_release_is_greater
errors.add_to_base("Next release must be greater than current release") unless next_release.to_f > current_release.to_f
end
end
Это работает - она проходит соответствующую проверку блока (ниже для Вашего удовольствия), я просто интересно, если есть более простой способ - то, что я мог бы попробовать иначе.
Соответствующий тест блока:
# Fixture data:
# PALS:
# name: PALS
# description: This is the PALS project
# current_release: 1.0
# next_release: 2.0
# project_category: 1
# user: 1
def test_release_is_future
project = Project.first(:conditions => {:name => 'PALS'})
project.current_release = 10.0
assert !project.save
project.current_release = 1.0
assert project.save
end
Отличный ответ, развернутый ответ - то, что мне нужно (плюс немного успокаиванию). –
Отличный ответ, пожалуйста, исправьте орфографическую ошибку, когда у вас есть шанс «greather_than». Еще раз спасибо. – ghayes
Выполнено, спасибо. –