Рельсы: удаление ссылочной связи


Я был смущен следующим кодом в учебнике.

Цель состоит в том, чтобы удалить ссылочный ключ genre_id из таблицы books

class RemoveGenreFromBooks < ActiveRecord::Migration

    def up
        remove_index :books, column: [:genre_id]
        remove_column :books, :genre_id
    end

    def down
        add_reference :books, :genre, index: true
    end

end

Но я не понимаю, что remove_index :books, column: [:genre_id] означает

Кроме того, я не получил этого index: true в down методе.

Если мне нужно добавить отношение, почему я не могу просто ввести

class Addrelationship < ActiveRecord::Migration
    def change
            add_reference :books, :genre
    end
2 2

2 ответа:

Поскольку есть способ добавить реферецен, есть также способ удалить - remove_reference

Синтаксис: remove_reference(table_name, ref_name, options = {})

Итак, в вашем случае, чтобы удалить ссылку Genre:

class RemoveGenreFromBooks < ActiveRecord::Migration
  def change
    remove_reference :books, :genre, index:true, foreign_key: true
  end
end

Опция foreign_key: true также удалит внешний ключ из таблицы books.

Rake db: шаг отката=1

- это способ сделать это, если миграция, которую вы хотите откатить, применяется последней. Вы можете заменить 1 для любого количества миграций, которые вы хотите вернуться.