Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 获取“value”3000002000“超出了类型整数的范围”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Rails 4.2.3和POSTGRe数据库.我希望我的数据库中的列存储数毫秒 – 注意,不是时间戳,而是持续时间(以毫秒为单位).所以我创建了我的专栏
time_in_ms | bigint

但是,当我在Rails中存储一个值时,我得到以下错误

ActiveRecord::StatemenTinvalid (PG::NumericValueOutOfRange: ERROR:  value "3000002000" is out of range for type integer
: INSERT INTO "my_object_times" ("time_in_ms","my_object_id","created_at","updated_at") VALUES ($1,$2,$3,$4) RETURNING "id"):
  app/controllers/my_objects_controller.rb:31:in `update'

看起来数字“3000002000”小于列的最大值(我正在阅读的是“9223372036854775807”),所以我想知道还有什么问题以及如何解决它.

编辑:为了提供更多信息,在我的db / scheR_608_11845@a.rb文件中,所描述的列就是这样描述的……

create_table "my_object_times",force: :cascade do |t|
  ...
  t.Integer  "time_in_ms",limit: 8

编辑2:这是PSQL中create table的输出

create table my_object_times (
    id integer NOT NULL,first_name character varying,last_name character varying,time_in_ms bigint,created_at timestamp without time zone NOT NULL,updated_at timestamp without time zone NOT NULL,name character varying,age integer,city character varying,state_id integer,country_id integer,over@R_450_10636@rank Integer,age_group_rank Integer,gender_rank Integer
);

解决方法

在我最初尝试在db中创建bigint字段之前,我曾经遇到过这种情况,由于某种原因,模型认为它是一个整数,即使模式和迁移文件将其指定为bigint.

例如:我有这个迁移文件

class CreateSecureUserTokens < ActiveRecord::Migration
  def change
    create_table :secure_user_tokens do |t|
      t.Integer :sso_id,null: false,length: 8
      t.String :token,null: false

      t.timestamps null: false
    end
  end
end

注意,它具有包含的长度:8要求使整数变为bigint.但是,在我运行迁移后,我遇到了与您相同的问题.最后,我刚刚创建了另一个迁移来尝试解决问题,并且它有效.这是我用来解决问题的迁移:

class ModifySecureTokensForLargerSsoIdSizes < ActiveRecord::Migration
  def change
    change_column :secure_user_tokens,:sso_id,:Integer,limit: 8
  end
end

因此,如果我们改变它以满足您的需求,那将是:

class ObjectTimesBigInt < ActiveRecord::Migration
  def change
    change_column :my_object_times,:time_in_ms,limit: 8
  end
end

希望有所帮助!-Charlie

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 获取“value”3000002000“超出了类型整数的范围”全部内容,希望文章能够帮你解决ruby-on-rails – 获取“value”3000002000“超出了类型整数的范围”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。