gpt4 book ai didi

ruby-on-rails - Postgres Rails Adapter 认为 Bigint/Varchar 是 Integer - 保存时导致异常

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

更新:这是关于 Rails 4.x 而不是 Rails 5 中的问题。

我有一个 Number 模型,其中一个 number 字段是一个 bigintschema.rb 文件正确地在数据库中创建了表结构。

Postgres numbers schema

但是使用该应用程序,当我创建一个新号码时,我收到一条错误消息:

RangeError at /numbers
71731224865 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4

为什么这个数字字段仍被视为标准整数而不是 bigint?

这似乎与 StackOverflow 上的其他“超出范围”错误不同,因为它们似乎都无法首先在数据库中获取定义为 bigint 的字段。但是,我明白了......这似乎是“保存”适配器吓坏了。

这是出现在 schema.rb 中的 create_table:

create_table "numbers", id: false, force: :cascade do |t|
t.bigint "number", null: false, index: {name: "index_numbers_on_number", unique: true}
t.string "formatted_number"
t.text "description"
t.integer "user_id", null: false, index: {name: "index_numbers_on_userid"}, foreign_key: {name: 'fk_numbers_user_id'}
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

Create number image
Stacktrace

更新 1:我将该列重新创建为 DECIMAL(11,0),希望这是一个临时解决方法,但是 也因同样的错误而失败!也许我唯一的解决方法是 VARCHAR(11)。

更新 2: 好的。 正在发生了一些奇怪的事情。我现在将该字段定义为 VARCHAR(11),这样我就可以继续工作了……但同样的错误也失败了。什么?

更新3:会不会是因为numbers表中的number字段是Primary Key?我没有使用 id 作为键,我已经覆盖了它。并不是说我正在尝试将该字段用作 VARCHAR,为什么 PostgreSQLAdaptor 仍然显示 ... is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4 是没有意义的 错误。

如果有帮助,这是我的 Number 模型:

class Number < AbstractModel
belongs_to :user
has_many :extensions

self.primary_key = 'number'
validates :number, numericality: { only_integer: true, greater_than_or_equal_to: 611, less_than_or_equal_to: 61999999999 }, presence: true, uniqueness: true
validates :user_id, presence: true
end

更新 4:使用 Rails 控制台查看内容 data type it thinks the columns是,它说整数!呃。 sql_type does 虽然返回 BIGINT。什么?

Loading development environment (Rails 4.2.1)
irb(main):001:0> Number.column_for_attribute('number').type
=> :integer
irb(main):002:0> Number.column_for_attribute('number').sql_type
=> "bigint"
irb(main):003:0> quit

确保数据库仍按预期设置:

[turgs@web123 myapp]$ psql -h 127.0.0.1 -p 5432
psql (9.1.15)

db=> \d numbers
Table "public.numbers"
Column | Type | Modifiers
------------------+-----------------------------+-----------
number | bigint | not null
formatted_number | character varying |
description | text |
user_id | integer | not null
max_extn_length | integer |
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
Indexes:
"index_numbers_on_number" UNIQUE, btree (number)
"index_numbers_on_userid" btree (user_id)
Referenced by:
TABLE "extensions" CONSTRAINT "fk_extensions_number_id" FOREIGN KEY (number_id) REFERENCES numbers(number)

db=>

更新 5: 是的......另一个更新!这一次我想我会摔倒在我的剑上并尝试每个人在其他帖子中使用的东西,他们首先无法让 BIGINT 在数据库中创建。因此,我将 schema.rb 更改为:

    create_table "numbers", id: false, force: :cascade do |t|
t.integer "number", limit: 8, null: false, index: {name: "index_numbers_on_number", unique: true}
t.string "formatted_number"
t.text "description"
t.integer "user_id", null: false, index: {name: "index_numbers_on_userid"}, foreign_key: {name: 'fk_numbers_user_id'}
t.integer "max_extn_length"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

注意 t.integer "number", limit: 8。令人惊讶的是,DID 仍然在数据库中创建了一个 bigint 字段。我的希望很高。不幸的是,没有雪茄。保存值时出现同样的错误。

最佳答案

尝试

t.column :number, :bigint

参见: Rails Migration: Bigint on PostgreSQL seems to be failing?

关于ruby-on-rails - Postgres Rails Adapter 认为 Bigint/Varchar 是 Integer - 保存时导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29786565/

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