当前位置: 首页 > 知识库问答 >
问题:

Rails 4.2.0中应通过验证捕获的简单整数赋值的RangeError

郑博
2023-03-14

*更新:这是现在固定在4.2.stable和4.2.1*

在Rails 4.2.0(以及当前的4.2.stable)中,< code > assure _ in _ range 方法发生在AR验证之前,产生一个< code>RangeError

如果我做了这么简单的事

@obj.threshold = 10_000_000_000

在具有postgres类型整数的列上

 threshold  | integer                     | 

它产生

RangeError:10000000000超出ActiveRecor的范围d::ConNC tion适配器::PostgreSQL::OID::整数,限制4从… /2.0.0-p598/lib/ruby/gems/2.0.0/bundler/gems/rails-62e9e61f2d1b/activerecord/lib/active_record/type/integer.rb:41:在ensure_in_range

哪个是真的!但是告诉用户吧。有一个活动记录模型验证,比如

  validates :threshold,  presence: true,
    numericality: { greater_than_or_equal_to: 0, less_than: 1_000_000}

我无法想象这是预期的行为,有人能解释为什么这种类型转换发生在验证之前吗?

共有3个答案

蒙洛华
2023-03-14

如果您只有一个验证,那么升级到Rails 4.2.1就可以了。但是,如果你有多个验证,比如验证唯一性,你必须升级到比4.2.1更新的版本。我升级到了4.2.3。我不知道4.2.2是否有效。

刘子实
2023-03-14

您可以强制迁移文件使用BigInt。我也遇到了同样的问题,但我没有使用Rails,只是使用ActiveRecord。这将解决您的错误:

t.integer:really_big_int,限制:8

梅欣然
2023-03-14

获取最新的rails版本来修复此错误,它最近由Sean Griffin修复

要在版本发布之前执行此操作,请删除 gemfile 中的特定版本并使用 git 位置提示:

gem 'rails', :git => 'https://github.com/rails/rails.git'
 类似资料:
  • 变量命名 在《初识永远强大的函数》一文中,有一节专门讨论“取名字的学问”,就是有关变量名称的问题,本着温故而知新的原则,这里要复习: 名称格式:(下划线或者字母)+(任意数目的字母,数字或下划线) 注意: 区分大小写 禁止使用保留字 遵循通常习惯 以单一下划线开头的变量名(_X)不会被from module import *语句导入的。 前后有下划线的变量名(X)是系统定义的变量名,对解释器有特殊

  • 问题内容: 嗨,我正在使用Eclipse Rcp,我需要验证仅接受我使用代码的整数值的文本框 它可以验证,但是与此有关的问题是我无法使用Backspace键删除数字。还请告诉我验证小数的想法。提前致谢 问题答案: 使用侦听器时,您可以清空文本字段,而不是使其不可编辑。您可以执行以下操作,该代码段基于您的代码。 如果您使用,则更好。我不确定您是否在SWT中拥有它,即使您不尝试寻找类似的东西。

  • 我刚刚制作了一个注册表单,在添加最终验证(MySQL验证)时遇到了一个问题。 这是我得到的错误:解析错误:语法错误,意外的'elseif'(T_ELSEIF)在C:\xampp\htdocs\Signup\包含\第72行的signup.php 第72行已标记,以帮助您解决此问题。 如果我注释和之间的所有内容,一切正常(除了我没有用户名验证的事实)。 如果你想知道$用户名是什么: 我在SO上读到了一

  • 本文向大家介绍layui在form表单页面通过Validform加入简单验证的方法,包括了layui在form表单页面通过Validform加入简单验证的方法的使用技巧和注意事项,需要的朋友参考一下 form简单验证 简单的点击图标左右开关 验证的设置 s6-18可以根据自己的长度进行自定义设置,s代表string字符串 修改layui监听事件 先验证表单 原layui监听 以上这篇layui在f

  • 本文向大家介绍PHP list() 将数组中的值赋给变量的简单实例,包括了PHP list() 将数组中的值赋给变量的简单实例的使用技巧和注意事项,需要的朋友参考一下 list() PHP list() 用一步操作把数组中的值赋给一些变量。同 array() 一样,list() 不是真正的函数,而是语言结构。 语法: void list( mixed var, mixed ... )注意: lis

  • 本文向大家介绍Nodejs中session的简单使用及通过session实现身份验证的方法,包括了Nodejs中session的简单使用及通过session实现身份验证的方法的使用技巧和注意事项,需要的朋友参考一下 session 不用多介绍,使一个http可以对应一个终端用户。 session的本质使用cookie来实现。 原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用