Right now, the current migration might fail, if the books
table doesn't have created_at
or updated_at
fields:
class AddTimestampIndexes < ActiveRecord::Migration def up remove_index :books, :created_at remove_index :books, :updated_at add_index :books, :created_at add_index :books, :updated_at end def down remove_index :books, :created_at remove_index :books, :updated_at end end
Does remove_index
take any options to silently proceed if it fails to remove the index rather than raising an error?
To run a specific migration up or down, use db:migrate:up or db:migrate:down . The version number in the above commands is the numeric prefix in the migration's filename. For example, to migrate to the migration 20160515085959_add_name_to_users. rb , you would use 20160515085959 as the version number.
Migration is the process by which Content Manager OnDemand moves index data from the database to archive storage. Migration optimizes database storage space while allowing you to maintain index data for a very long time.
16, removing the column removes the index.
You can use the index_exists?
method within your migration to test whether the index you need to remove is actually there.
Take a look at the documentation here: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/index_exists%3F
I've not tested it, but you should be able to use something like this:
class AddTimestampIndexes < ActiveRecord::Migration def up remove_index :books, :created_at if index_exists?(:books, :created_at) remove_index :books, :updated_at if index_exists?(:books, :updated_at) add_index :books, :created_at add_index :books, :updated_at end def down remove_index :books, :created_at remove_index :books, :updated_at end end
Although, by the looks of things, you really only want to create them if they don't exist? This might be more appropriate for your migration:
class AddTimestampIndexes < ActiveRecord::Migration def up add_index :books, :created_at unless index_exists?(:books, :created_at) add_index :books, :updated_at unless index_exists?(:books, :updated_at) end def down remove_index :books, :created_at remove_index :books, :updated_at end end
There is also index_name_exists?(table_name, index_name)
method which let's you check for an index by it's name. It's helpful for checking for existence of multi-column indexes.
Documentation - index_name_exists
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With