title: ActiveRecord::IrreversibleMigration exception when reverting migration
body: <p>I have created the following Active Record Migration that adds and removes some indexes.</p>
  
  <pre><code>class FixIndexes &lt; ActiveRecord::Migration
    def change
      add_index :table1, :field1, :unique =&gt; true
  
      remove_index :table2, :name =&gt; "index_table2_on_field1"
      remove_index :table2, :name =&gt; "index_table2_on_field2"
  
      remove_index :table3, :name =&gt; "index_table3_on_field1"
      add_index :table3, [:field1, :field2]
    end
  end
  </code></pre>
  
  <p>When I run the migration (<code>$ bundle exec rake db:migrate</code>) it works fine as expected.</p>
  
  <p>Unfortunately when I try to revert the migration (<code>$ bundle exec rake db:rollback</code>) it does not work and raises an <code>ActiveRecord::IrreversibleMigration</code> exception</p>
  
  <pre><code>==  FixIndexes: reverting =====================================================
  rake aborted!
  An error has occurred, all later migrations canceled:
  
  ActiveRecord::IrreversibleMigration/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:42:in `block in inverse'
  /usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:40:in `map'
  </code></pre>
  
  <p>My questions are:</p>
  
  <ol>
  <li>Why this is an irreversible migration? It just adding and
  removing some indexes, not data.</li>
  <li>It will fix the problem if I use <code>def self.up</code> and <code>def self.down</code>
  instead of <code>def change</code>?</li>
  <li>How can I revert now this changes without adding and removing the
  indexes manually from MySQL?</li>
  </ol>