Как обрабатывать неудачные миграции при сбросе из-за удаленных моделей / методов - PullRequest
1 голос
/ 04 февраля 2010

Старая версия моей рубиновой миграции на рельсах содержит как фактическую миграцию, так и действие для изменения данных:

class AddTypeFlagToGroup < ActiveRecord::Migration
  def self.up
    add_column :groups, :selection_type, :string

    Group.reset_column_information
    Group.transaction do
    Group.all.each do |group|
      group.selection_type = group.calculate_selection_type
      group.save
    end
  end
  end

  def self.down
    remove_column :groups, :selection_type
  end
end

В этой миграции есть обычные операторы миграции add_column и remove_column. Но есть также некоторые специфичные для модели вызовы методов.

Я написал это пару недель назад. С тех пор я удалил свою модель Group, которая выдает ошибку при полной миграции с :reset.

rake db:migrate:reset
(in /Users/jesper/src/pet_project)

[...]

==  AddTypeFlagToGroup: migrating =============================================
-- add_column(:groups, :selection_type, :string)
   -> 0.0012s
rake aborted!
An error has occurred, this and all later migrations canceled:

uninitialized constant AddTypeFlagToGroup::Group

Дело в том, что в текущей редакции моего кода Group не существует. Как мне справиться с этим "рельсовым путем" ??

Я думаю, что мог бы изменить миграцию, комментируя материал Group.xxx, но разве это разумный путь?

1 Ответ

1 голос
/ 04 февраля 2010

Нет смысла оставлять групповые вещи в вашей миграции сейчас, когда они удалены из вашего проекта. Я бы просто отредактировал миграцию, выкинул все из БД и мигрировал с нуля. Нет даже причины комментировать это (вы используете контроль версий, верно?)

Кроме того, я считаю, что «рельсовый путь» с миграциями пишется «Arrrrgh!»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...