我需要使用外部源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的錯誤' –