Во-первых, позвольте мне сказать, что я чрезвычайно новичок в 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
Это работает - он передает соответствующий unit test (ниже для вашего удовольствия просмотра), мне просто интересно, есть ли более простой способ - я мог бы попробовать иначе.
Соответствующий unit test:
# 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