Saya memiliki tugas menyapu yang tidak akan berfungsi kecuali jika ada meja. Saya bekerja dengan lebih dari 20 insinyur di sebuah situs web sehingga saya ingin memastikan mereka telah memigrasi tabel sebelum mereka dapat melakukan tugas menyapu yang akan mengisi tabel masing-masing.
Apakah AR memiliki metode seperti itu Table.exists
? Bagaimana saya bisa memastikan mereka berhasil memigrasi tabel?
rake db:migrate
akan gagal.)Jawaban:
Dalam Rails 5 API menjadi eksplisit mengenai tabel / tampilan , secara kolektif sumber data .
Di Rails 2, 3 & 4 API adalah tentang tabel .
Mendapatkan status migrasi:
Jika Anda membutuhkan lebih banyak API untuk migrasi atau metadata, lihat:
ini adalah
ActiveRecord::Base
kelas untukschema_migrations
tabelmana semua tindakan terjadi ketika migrasi dijalankan
sumber
ActiveRecord::Base.connection.table_exist 'users'
akan memeriksa tabel pengguna.ActiveRecord::Base.connection.table_exists? 'kittens
akan memeriksa meja Kitten. Itu kecuali aku menghancurkan semua anak kucing!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
adalah yang benar sekarangbahkan jika tabel tidak ada:
model
Kitten
,kittens
rel meja yang diharapkan 3:Kitten.table_exists? # => salah
sumber
Saya menemukan ini ketika saya mencoba untuk menghapus tabel melalui migrasi:
bekerja untuk Rails 3.2
Formulir sederhana ini akan tersedia di Rails 5:
Referensi: https://github.com/rails/rails/pull/16366
Dan inilah CHANGELOG Rails 5 ActiveRecord :
sumber
Rel 5.1
atau
sumber
Cara yang tepat untuk melakukan ini adalah Model.table_exists?
sumber