Você precisa mudar de
db/schema.rb para db/structure.sql . O problema subjacente é que
schema.rb éuma representação da estrutura da base de dados tal como o ActiveRecord a vê mas o ActiveRecord não compreende muitas coisas (como create type , CHECK restrições e outras coisas que aparecem em execute some_raw_sql instruções em migrações) que o PostgreSQL faz. Você pode create type tudo o que você quer, mas schema.rb nunca vai ver. Se você quiser usar coisas que o ActiveRecord não entende, você deve usar
db/structure.sql para armazenar a estrutura do seu banco de dados. structure.sql armazena a estrutura do banco de dados como o banco de dados a entende, não como o ActiveRecord a entende. A comutação é fácil:
- Atualize seu
config/application.rbpara conterconfig.active_record.schema_format = :sql. - Faça um
rake db:structure:dumppara obter umdb/structure.sqlinicial . - Excluir
db/schema.rbda sua árvore de diretórios e controle de revisão. - Adicionar
db/structure.sqlao controle de revisão. - Ajuste seus hábitos de rake:
- Usar
db:structure:dumpem vez dedb:schema:dump - Usar
db:structure:loadem vez dedb:schema:load
- Usar
Dito isso, não tenho certeza de quão bem o
enum nativo do PostgreSQL tipos irão interagir com o ActiveRecord como eu nunca fiz. enum do AR s
são uma tradução do lado do cliente entre strings e inteiros, mas enum s
são tratados dentro do banco de dados e eles não sabem um do outro. Pode haver conflitos e você precisará mantê-los sincronizados entre si.