Во-первых, позвольте мне сказать, что я чрезвычайно новичок в 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