Ich muss eine Tabelle von Benutzern indizieren, die eine extern sourced ID verwenden, die eine 64-Bit-Ganzzahl ist. Rails ist perfekt in der Lage, eine solche Nummer zu speichern, es sei denn, es handelt sich um den Primärschlüssel. Ich habe die folgende Migration:Ruby on Rails ignorieren ganzzahlige Grenze
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
Die Migration funktioniert gut, keine Fehler gemeldet, aber wenn ich Samen versuchen, es mit einem 64-Bit-Integer, ich bin durch diese abgezählt:
RangeError: 76561198054432981 is out of range for ActiveRecord::Type::Integer with limit 4
Offensichtlich ignoriert Rails das Limit-Feld, solange es der Primärschlüssel/das: ID-Feld ist? Wie soll ich damit umgehen?
Für was es wert ist, verwende ich sqlite3 (Standard), aber meines Wissens ist sqlite perfekt in der Lage, 64-Bit-Ganzzahlen zu speichern.
Hier ist der table_info von SQLite:
0|id|integer(8)|0||0
1|name|varchar|0||0
2|created_at|datetime|1||0
3|updated_at|datetime|1||0
Sind Sie sicher, das ist kein Problem SQLite? http://jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers/ –
@CristianoBetta Ich glaube nicht, ich habe versucht, eine andere Spalte mit den gleichen Spezifikationen unter einem anderen Namen hinzufügen, die gut funktionierte . Entsprechend dem Pragma table_info werden beide auf die gleiche Weise definiert. – Will
Ich habe ein ähnliches Problem auf PostgreSQL. Die Datenbank gibt an, dass die Spalte "bigint" ist und die Spaltenmetadaten das Limit von 8 angeben, aber ich erhalte den Fehler "out of range für ActiveModel :: Type :: Integer with limit 4" –