首先,让我说我对Rails是extremely个新手(曾经玩过一两次,但现在强迫自己用它写一个完整的项目,昨天就开始了).
我现在试图验证模型属性(术语?)比另一个更伟大.对于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
这是有效的——它通过了相关的单元测试(下面是为了让你观看的乐趣),我只是好奇是否有更简单的方法——我本可以try 其他方法.
相关单元测试:
# 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