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 the ActiveRecord::Base class for the schema_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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?