Ответ 1
В Rails 5 API ActiveRecord:: SchemaMigration
это класс ActiveRecord::Base
для таблицы schema_migrations
где все действия происходят при выполнении миграции.
У меня есть задача rake, которая не будет работать, если таблица не существует. Я работаю с более чем 20 инженерами на веб-сайте, поэтому я хочу убедиться, что они перенесли таблицу, прежде чем они смогут выполнить задачу рейка, которая заполнит эту соответствующую таблицу.
Есть ли у AR метод, например Table.exists
? Как я могу убедиться, что они успешно перенесли таблицу?
В Rails 5 API ActiveRecord:: SchemaMigration
это класс ActiveRecord::Base
для таблицы schema_migrations
даже если таблица не существует:
модель Kitten
, ожидаемая таблица kittens
рельсы 3:
Kitten.table_exists? # = > false
Я нашел это, когда пытался удалить таблицу с помощью миграции:
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:
Ввести параметр: if_exists для drop_table.
Пример:
drop_table(:posts, if_exists: true)
Это выполнит:
DROP TABLE IF EXISTS posts
Если таблица не существует, if_exists: false (по умолчанию) вызывает исключение, тогда как if_exists: true ничего не делает.
Rails 5.1
if ActiveRecord::Base.connection.data_source_exists? 'table_name'
drop_table :table_name
end
или
drop_table :table_name, if_exists: true