Ruby on rails Rails迁移:代码不断演变,迁移不再有效:怎么办?

Ruby on rails Rails迁移:代码不断演变,迁移不再有效:怎么办?,ruby-on-rails,git,database-migration,Ruby On Rails,Git,Database Migration,所以我进行了这个迁移,它处理我的模型,然后在列中添加一个:deleted_ class HandleMyModel < ActiveRecord::Migration def up Model.all.each do |m| m.process_data # whatever it is end add_column :models, :deleted_at, :datetime end def down Model.all.eac

所以我进行了这个迁移,它处理我的模型,然后在列中添加一个:deleted_

class HandleMyModel < ActiveRecord::Migration
  def up
    Model.all.each do |m|
      m.process_data # whatever it is
    end
    add_column :models, :deleted_at, :datetime
  end

  def down
    Model.all.each do |m|
      m.unprocess_data # whatever it is
    end
    remove_column :models
  end

end
我将其全部提交,并推送到其他环境开发人员。但在那里,当我运行迁移时,我在模型中得到一个错误undefined column deleted\u at,这与模型一样有意义。包含默认\u范围但已删除\u at的所有查询尚不存在

在这种情况下我该怎么办

我是否应该注释默认的\u范围,直到每个环境都迁移到脏环境? 在这种情况下,我是否应该创建单独的迁移数据迁移+数据库结构迁移,并在迁移失败时重新排序? 我可以告诉迁移使用特定的代码提交来运行自己吗? 我完蛋了吗? 感谢您的支持

在处理数据之前,您需要将已删除的_at列添加到模型中。但您还需要在模型定义到达Model.all之前重置模型定义,以便找到新的deleted_at列

例如:

class HandleMyModel < ActiveRecord::Migration
  def up
    add_column :models, :deleted_at, :datetime

    Model.reset_column_information    # <-- this line will allow the new :deleted_at column to be see in Model.all

    Model.all.each do |m|
      m.process_data # whatever it is
    end
  end

  def down
    Model.all.each do |m|
      m.unprocess_data # whatever it is
    end
    remove_column :models, :deleted_at
  end
end
class HandleMyModel < ActiveRecord::Migration
  def up
    add_column :models, :deleted_at, :datetime

    Model.reset_column_information    # <-- this line will allow the new :deleted_at column to be see in Model.all

    Model.all.each do |m|
      m.process_data # whatever it is
    end
  end

  def down
    Model.all.each do |m|
      m.unprocess_data # whatever it is
    end
    remove_column :models, :deleted_at
  end
end