Du måste byta från db/schema.rb till db/structure.sql .
Det underliggande problemet är att schema.rb är en representation av databasens struktur som ActiveRecord ser den men ActiveRecord förstår inte många saker (som create type , CHECK-begränsningar och andra saker som dyker upp i execute some_raw_sql uttalanden i migrationer) som PostgreSQL gör. Du kan create type allt du vill utom schema.rb kommer aldrig att se det.
Om du vill använda saker som ActiveRecord inte förstår måste du använda db/structure.sql för att lagra din databas struktur. structure.sql lagrar databasens struktur som databasen förstår den, inte som ActiveRecord förstår den.
Det är enkelt att byta:
- Uppdatera din
config/application.rbatt innehållaconfig.active_record.schema_format = :sql. - Gör en
rake db:structure:dumpför att få en initialdb/structure.sql. - Ta bort
db/schema.rbfrån ditt katalogträd och revisionskontroll. - Lägg till
db/structure.sqltill revisionskontroll. - Justera dina rakevanor:
- Använd
db:structure:dumpistället fördb:schema:dump - Använd
db:structure:loadistället fördb:schema:load
- Använd
Som sagt, jag är inte säker på hur bra PostgreSQL:s ursprungliga enum typer kommer att interagera med ActiveRecord eftersom jag aldrig har gjort det. AR:s enum s
är en översättning på klientsidan mellan strängar och heltal men PostgreSQL:s enum s
hanteras i databasen och de känner inte till varandra. Det kan finnas konflikter och du måste se till att hålla dem synkroniserade med varandra.