【发布时间】:2009-12-22 13:03:35
【问题描述】:
首先,让我说我是非常 Rails 的新手(玩过一两次,但现在强迫自己用它写一个完整的项目,昨天就开始了)。
我现在正在尝试验证模型属性(术语?)是否大于另一个。这似乎是带有greater_than 选项的validates_numericality_of 的完美实例,但可惜这会引发错误,告诉我greater_than expects a number, not a symbol。如果我尝试对该符号进行类型转换 .to_f 我会收到 undefined method 错误。
这是我最终所做的,我很好奇是否有更好的方法。这只是一个控制项目发布的简单系统,我们只有主要/次要版本(单点),所以浮动在这里感觉是正确的决定。
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
【问题讨论】:
标签: ruby-on-rails activerecord