gpt4 book ai didi

ruby-on-rails - 获取 "value "300000200 0"is out of range for type integer"

转载 作者:行者123 更新时间:2023-11-29 11:29:17 25 4
gpt4 key购买 nike

我正在使用 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/schema.rb 文件中,有问题的列是这样描述的......

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

编辑 2:这是在 PSQL 中创建表的输出

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,
overall_rank integer,
age_group_rank integer,
gender_rank integer
);

最佳答案

我之前遇到过这种情况,当我最初尝试在数据库中创建一个 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, :integer, limit: 8
end
end

希望对您有所帮助!-查理

关于ruby-on-rails - 获取 "value "300000200 0"is out of range for type integer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37515139/

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