Devi passare da db/schema.rb a db/structure.sql .
Il problema di fondo è che schema.rb è una rappresentazione della struttura del database come la vede ActiveRecord ma ActiveRecord non comprende molte cose (come create type , CHECK vincoli e altre cose che appaiono in execute some_raw_sql istruzioni nelle migrazioni) che fa PostgreSQL. Puoi create type tutto quello che vuoi tranne schema.rb non lo vedrà mai.
Se vuoi usare cose che ActiveRecord non capisce, devi usare db/structure.sql per memorizzare la struttura del database. structure.sql memorizza la struttura del database così come la comprende il database, non come la comprende ActiveRecord.
Cambiare è facile:
- Aggiorna il tuo
config/application.rbper contenereconfig.active_record.schema_format = :sql. - Fai un
rake db:structure:dumpper ottenere undb/structure.sqliniziale . - Elimina
db/schema.rbdall'albero delle directory e dal controllo delle revisioni. - Aggiungi
db/structure.sqlal controllo di revisione. - Regola le tue abitudini di rake:
- Usa
db:structure:dumpinvece didb:schema:dump - Usa
db:structure:loadinvece didb:schema:load
- Usa
Detto questo, non sono sicuro di quanto bene sia il enum nativo di PostgreSQL i tipi interagiranno con ActiveRecord come non l'ho mai fatto. enum di AR s
sono una traduzione lato client tra stringhe e interi ma enum s
sono gestiti all'interno del database e non si conoscono. Potrebbero esserci conflitti e dovrai assicurarti di mantenerli sincronizzati tra loro.