Search code examples
ruby-on-railsrubyrails-activerecordrails-migrations

Check if a table exists in Rails


I have a rake task that won't work unless a table exists. I'm working with more than 20 engineers on a website so I want to make sure they have migrated the table before they can do a rake task which will populate that respective table.

Does AR have a method such as Table.exists? How can I make sure they have migrated the table successfully?


Solution

  • 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: