Eu tenho uma tarefa de rake que não funcionará, a menos que exista uma tabela. Estou trabalhando com mais de 20 engenheiros em um site, por isso quero ter certeza de que eles migraram a tabela antes de poderem executar uma tarefa de rake que preencherá a respectiva tabela.
O AR tem um método como Table.exists
? Como posso garantir que eles migraram a tabela com êxito?
ruby-on-rails
ruby
rails-activerecord
rails-migrations
thenengah
fonte
fonte
rake db:migrate
irá falhar.)Respostas:
No Rails 5, a API tornou-se explícita em relação a tabelas / visualizações , fontes de dados coletivamente .
Nos Rails 2, 3 e 4, a API é sobre tabelas .
Obtendo o status das migrações:
Se você precisar de mais APIs para migrações ou metadados, consulte:
esta é a
ActiveRecord::Base
classe daschema_migrations
tabelaonde toda a ação acontece quando as migrações são executadas
fonte
ActiveRecord::Base.connection.table_exist 'users'
iria verificar uma tabela de usuários.ActiveRecord::Base.connection.table_exists? 'kittens
iria procurar uma mesa Kitten. Isto é, a menos que eu destrua todos os gatinhos!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
é o correto agoramesmo que a tabela não exista:
modelo
Kitten
,kittens
trilhos de tabela esperados 3:Kitten.table_exists? # => false
fonte
Descobri isso enquanto tentava remover uma tabela por meio de uma migração:
trabalha para o Rails 3.2
Este formulário mais simples estará disponível no Rails 5:
Referência: https://github.com/rails/rails/pull/16366
E aqui está o do Rails 5 ActiveRecord CHANGELOG :
fonte
Rails 5.1
ou
fonte
A maneira correta de fazer isso é Model.table_exists?
fonte