У меня есть грабли, которые не будут работать, если таблица не существует. Я работаю с более чем 20 инженерами на веб-сайте, поэтому я хочу убедиться, что они перенесли таблицу, прежде чем они смогут выполнить задачу rake, которая заполнит эту соответствующую таблицу.
Есть ли у AR такой метод, как Table.exists
? Как я могу убедиться, что они успешно перенесли таблицу?
rake db:migrate
потерпит неудачу.)Ответы:
В Rails 5 API стало явным в отношении таблиц / представлений , в совокупности источников данных .
В Rails 2, 3 и 4 API касается таблиц .
Получение статуса миграций:
Если вам нужно больше API для миграции или метаданных, смотрите:
это
ActiveRecord::Base
класс дляschema_migrations
таблицыгде все действия происходят при выполнении миграций
источник
ActiveRecord::Base.connection.table_exist 'users'
проверил бы для таблицы пользователей.ActiveRecord::Base.connection.table_exists? 'kittens
проверил бы для таблицы котенка. Это если я не уничтожил всех котят!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
сейчас правильныйдаже если таблица не существует:
Модель
Kitten
, ожидаемый столkittens
рельсов 3:Kitten.table_exists? # => ложь
источник
Я узнал об этом, когда пытался удалить таблицу с помощью миграции:
работает для Rails 3.2
Эта более простая форма станет доступной в Rails 5:
Ссылка: https://github.com/rails/rails/pull/16366
А вот CHANGELOG в Rails 5 ActiveRecord :
источник
Rails 5.1
или
источник
Правильный способ сделать это - Model.table_exists?
источник