Проверьте, существует ли таблица в Rails
У меня есть грабли задача, которая не будет работать, если таблица существует. Я работаю с более чем 20 инженерами на веб-сайте, поэтому я хочу убедиться, что они перенесли таблицу, прежде чем они смогут выполнить задачу rake, которая заполнит эту соответствующую таблицу.
есть ли у AR такой метод, как Table.exists
? Как я могу убедиться, что они успешно перенесли таблицу?
4 ответа:
в рельсы 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:: SchemaMigration
это и естьActiveRecord::Base
классschema_migrations
таблица- ActiveRecord:: Migrator
где все действия происходят при выполнении миграции
даже если таблица не существует:
модель
Kitten
, ожидал столkittens
рельсы 3:котенок.table_exists? # = > false
я обнаружил это, когда пытался удалить таблицу с помощью миграции:
drop_table :kittens if (table_exists? :kittens) ActiveRecord::Migration.drop_table :kittens if (ActiveRecord::Base.connection.table_exists? :kittens)
работает для рельсов 3.2
эта простая форма станет доступна в Rails 5:
drop_table :kittens, if_exists: true
Ссылка:https://github.com/rails/rails/pull/16366
а вот рельсы 5 у ActiveRecord список изменений:
вводим :параметра if_exists для выполняться инструкция drop_table.
пример:
drop_table(:posts, if_exists: true)
что бы выполнить:
DROP TABLE IF EXISTS posts
если таблица не существует, if_exists: false (по умолчанию) вызывает исключение, тогда как if_exists: true ничего не делает.