64ビット整数である外部ソースIDを使用してユーザのテーブルを索引付けする必要があります。 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ビットの整数を格納できます。
は、ここでの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
のコードベースであるためしかし可能であるあなたは、これはSQLiteの問題ではありませんか? http://jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers/ –
@CristianoBetta私はそう信じていませんが、別の名前で同じスペックの別の列を追加しようとしましたが正常に動作しました。 pragma table_infoによれば、両方とも同じ方法で定義されます。 – Will
私はPostgreSQLで同様の問題があります。データベースはカラムが 'bigint'でカラムメタデータが限界値を8と指定していますが、ActiveModel :: Type :: Integer for limit 4のエラーを受け取りました。 –