gpt4 book ai didi

ruby-on-rails - 验证模型属性大于另一个

转载 作者:行者123 更新时间:2023-12-03 08:57:03 25 4
gpt4 key购买 nike

首先,让我说我对 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

最佳答案

正如您所注意到的,唯一的方法是使用自定义验证器。
:greater_than 选项应该是一个整数。以下代码将不起作用,因为当前版本和下一个版本都仅在实例级别可用。

class Project < ActiveRecord::Base
validates_numericality_of :current_release
validates_numericality_of :next_release, :greater_than => :current_release
end
greater_than的目的选项是根据静态常量或其他类方法验证值。

所以,不要介意继续使用您的自定义验证器。 :)

关于ruby-on-rails - 验证模型属性大于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1946261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com