Anda perlu beralih dari db/schema.rb ke db/structure.sql .
Masalah mendasarnya adalah schema.rb adalah representasi dari struktur database seperti yang dilihat ActiveRecord tetapi ActiveRecord tidak memahami banyak hal (seperti create type , PERIKSA batasan, dan hal lain yang muncul di execute some_raw_sql pernyataan dalam migrasi) yang dilakukan PostgreSQL. Anda dapat create type semua yang Anda inginkan kecuali schema.rb tidak akan pernah melihatnya.
Jika Anda ingin menggunakan hal-hal yang ActiveRecord tidak mengerti maka Anda harus menggunakan db/structure.sql untuk menyimpan struktur database Anda. structure.sql menyimpan struktur database seperti yang dipahami database, bukan seperti yang dipahami ActiveRecord.
Beralih itu mudah:
- Perbarui
config/application.rbAnda berisiconfig.active_record.schema_format = :sql. - Lakukan
rake db:structure:dumpuntuk mendapatkandb/structure.sqlawal . - Hapus
db/schema.rbdari pohon direktori dan kontrol revisi Anda. - Tambahkan
db/structure.sqluntuk kontrol revisi. - Sesuaikan kebiasaan menyapu Anda:
- Gunakan
db:structure:dumpbukannyadb:schema:dump - Gunakan
db:structure:loadbukannyadb:schema:load
- Gunakan
Yang mengatakan, saya tidak yakin seberapa baik enum asli PostgreSQL jenis akan berinteraksi dengan ActiveRecord karena saya belum pernah melakukannya. enum AR s
adalah terjemahan sisi klien antara string dan bilangan bulat tetapi enum s
ditangani di dalam database dan mereka tidak tahu satu sama lain. Mungkin ada konflik dan Anda harus memastikannya tetap sinkron satu sama lain.