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.rb
Anda berisiconfig.active_record.schema_format = :sql
. - Lakukan
rake db:structure:dump
untuk mendapatkandb/structure.sql
awal . - Hapus
db/schema.rb
dari pohon direktori dan kontrol revisi Anda. - Tambahkan
db/structure.sql
untuk kontrol revisi. - Sesuaikan kebiasaan menyapu Anda:
- Gunakan
db:structure:dump
bukannyadb:schema:dump
- Gunakan
db:structure:load
bukannyadb: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.