【发布时间】:2016-01-24 08:42:12
【问题描述】:
我需要使用一个 64 位整数的外部来源 id 来索引用户表。 Rails 完全有能力存储这样一个数字,除非它看起来是主键。我有以下迁移:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users, :id => false do |t|
t.integer :id, limit: 8
t.string :name
t.timestamps null: false
end
end
end
迁移工作正常,没有报告错误,但是当我尝试使用 64 位整数对其进行播种时,我被告知:
RangeError: 76561198054432981 is out of range for ActiveRecord::Type::Integer with limit 4
Rails 显然忽略了 limit 字段,只要它是主键/ :id 字段?我应该如何处理这个问题?
值得我使用 sqlite3(默认),但据我所知,sqlite 完全能够存储 64 位整数。
这是来自 sqlite 的 table_info:
0|id|integer(8)|0||0
1|name|varchar|0||0
2|created_at|datetime|1||0
3|updated_at|datetime|1||0
【问题讨论】:
-
你确定这不是 SQLite 问题吗? jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers
-
@CristianoBetta 我不相信,我尝试以不同的名称添加具有相同规格的另一列,效果很好。根据 pragma table_info 两者的定义方式相同。
-
我在 PostgreSQL 上有一个类似的问题。数据库声明该列是
bigint,列元数据声明限制为8,但我得到out of range for ActiveModel::Type::Integer with limit 4的错误
标签: ruby-on-rails ruby sqlite