首先,让我说我是极其新新的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
出色答卷,详细的回应 - 我需要的(加少许安慰)。 – 2009-12-22 16:05:11
很好的答案,当你有机会“greather_than”时,请修复拼写错误。再次感谢。 – ghayes 2011-08-09 06:02:10
完成,谢谢。 – 2011-08-09 08:48:19