Mam zadanie rake, które nie zadziała, jeśli nie ma stołu. Pracuję z ponad 20 inżynierami na stronie internetowej, więc chcę się upewnić, że dokonali migracji tabeli, zanim będą mogli wykonać zadanie prowizji, które zapełni tę odpowiednią tabelę.
Czy AR ma metodę taką jak Table.exists
? Jak mogę się upewnić, że migracja tabeli zakończyła się pomyślnie?
rake db:migrate
się nie uda)Odpowiedzi:
W Railsach 5 API stało się jawne w odniesieniu do tabel / widoków , zbiorczych źródeł danych .
W Railsach 2, 3 i 4 API dotyczy tabel .
Uzyskanie statusu migracji:
Jeśli potrzebujesz więcej interfejsów API do migracji lub metadanych, zobacz:
to jest
ActiveRecord::Base
klasa dlaschema_migrations
tabeliktórym cała akcja jest wykonywana po uruchomieniu migracji
źródło
ActiveRecord::Base.connection.table_exist 'users'
sprawdziłby tabelę użytkowników.ActiveRecord::Base.connection.table_exists? 'kittens
sprawdziłby stolik Kitten. Chyba że zniszczyłem wszystkie kocięta!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
jest teraz poprawnanawet jeśli tabela nie istnieje:
model
Kitten
, oczekiwana tabelakittens
szyny 3:Kitten.table_exists? # => fałsz
źródło
Dowiedziałem się o tym podczas próby usunięcia tabeli poprzez migrację:
działa dla Railsów 3.2
Ta prostsza forma będzie dostępna w Railsach 5:
Źródła: https://github.com/rails/rails/pull/16366
A oto dziennik zmian Rails 5 ActiveRecord :
źródło
Szyny 5.1
lub
źródło
Właściwy sposób na to to Model.table_exists?
źródło