我需要使用外部源ID(64位整数)对用户表进行索引。 Rails完全有能力存储这样的数字,除非它是主键。我有以下迁移:Ruby on 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忽略限制字段,只要它是主键/ id字段?我应该如何处理这个问题?
为什么它的价值我使用sqlite3(默认),但据我所知,sqlite是完全有能力存储64位整数。
下面是从源码的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的问题? http://jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers/ –
@CristianoBetta我不这么认为,我试着在不同的名字下使用相同的规格添加另一列, 。根据pragma table_info,两者都以相同的方式定义。 – Will
我在PostgreSQL上有类似的问题。数据库指出该列是'bigint',列元数据指出了8的限制,但是我得到了超出范围的ActiveModel :: Type :: Integer的限制4的错误' –