Check If A Table Exists In Rails
Answer :
In Rails 5 the API became explicit regarding tables/views, collectively data sources.
# 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'
In Rails 2, 3 & 4 the API is about tables.
# 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'
Getting the status of migrations:
# Tells you all migrations run ActiveRecord::Migrator.get_all_versions # Tells you the current schema version ActiveRecord::Migrator.current_version
If you need more APIs for migrations or metadata see:
- ActiveRecord::SchemaMigration
this is theActiveRecord::Base
class for theschema_migrations
table - ActiveRecord::Migrator
where all the action happens when migrations are run
even if table is not exists:
model Kitten
, expected table kittens
rails 3:
Kitten.table_exists? #=> false
I found this out while I was trying to remove a table via a migration:
drop_table :kittens if (table_exists? :kittens) ActiveRecord::Migration.drop_table :kittens if (ActiveRecord::Base.connection.table_exists? :kittens)
works for Rails 3.2
This simpler form will become available in Rails 5:
drop_table :kittens, if_exists: true
Reference: https://github.com/rails/rails/pull/16366
And here's the Rails 5 ActiveRecord's CHANGELOG:
Introduce the :if_exists option for drop_table.
Example:
drop_table(:posts, if_exists: true)
That would execute:
DROP TABLE IF EXISTS posts
If the table doesn't exist, if_exists: false (the default) raises an exception whereas if_exists: true does nothing.
Comments
Post a Comment