テーブルが存在しないと機能しないレーキ タスクがあります。私は Web サイトで 20 人以上のエンジニアと協力しているので、それぞれのテーブルに入力するレーキ タスクを実行する前に、彼らがテーブルを移行したことを確認したいと考えています。
ARには次のような方法がありTable.exists
ますか?テーブルが正常に移行されたことを確認するにはどうすればよいですか?
テーブルが存在しないと機能しないレーキ タスクがあります。私は Web サイトで 20 人以上のエンジニアと協力しているので、それぞれのテーブルに入力するレーキ タスクを実行する前に、彼らがテーブルを移行したことを確認したいと考えています。
ARには次のような方法がありTable.exists
ますか?テーブルが正常に移行されたことを確認するにはどうすればよいですか?
Rails 5 では、API はテーブル/ビュー、総称してデータ ソースに関して明示的になりました。
# Tables and views
ActiveRecord::Base.connection.data_sources
ActiveRecord::Base.connection.data_source_exists? 'kittens'
# Tables
ActiveRecord::Base.connection.tables
ActiveRecord::Base.connection.table_exists? 'kittens'
# Views
ActiveRecord::Base.connection.views
ActiveRecord::Base.connection.view_exists? 'kittens'
Rails 2、3、および 4 では、API はテーブルに関するものです。
# Listing of all tables and views
ActiveRecord::Base.connection.tables
# Checks for existence of kittens table/view (Kitten model)
ActiveRecord::Base.connection.table_exists? 'kittens'
移行のステータスを取得する:
# Tells you all migrations run
ActiveRecord::Migrator.get_all_versions
# Tells you the current schema version
ActiveRecord::Migrator.current_version
移行またはメタデータ用にさらに API が必要な場合は、次を参照してください。
ActiveRecord::Base
クラスですschema_migrations
テーブルが存在しない場合でも:
モデルKitten
、予想されるテーブルkittens
レール 3:
Kitten.table_exists? #=>偽
移行によってテーブルを削除しようとしているときに、これを見つけました。
drop_table :kittens if (table_exists? :kittens)
ActiveRecord::Migration.drop_table :kittens if (ActiveRecord::Base.connection.table_exists? :kittens)
Rails 3.2で動作します
Rails 5 では、この単純な形式が利用可能になります。
drop_table :kittens, if_exists: true
参考:https ://github.com/rails/rails/pull/16366
Rails 5 ActiveRecord のCHANGELOGは次のとおりです。
drop_table に :if_exists オプションを導入。
例:
drop_table(:posts, if_exists: true)
それは実行されます:
DROP TABLE IF EXISTS posts
テーブルが存在しない場合、if_exists: false (デフォルト) は例外を発生させますが、if_exists: true は何もしません。