首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -在迁移期间转换数据

问Rails -在迁移期间转换数据
EN

Stack Overflow用户
提问于 2012-09-22 11:30:17
回答 1查看 77关注 0票数 0

我正在将模型中的一些数据拆分到一个新的模型中,并在它们之间创建一个关联。

我已经将new_model_id添加到OldModel,使用address作为字符串属性创建了NewModel,并进行了以下迁移:

代码语言:javascript
复制
class RemoveAddressFromOldModel < ActiveRecord::Migration
  def up
    OldModel.where("address IS NOT NULL AND address != ''").each do |i|
      j = NewModel.create(address: i.address)
      i.new_model_id = j.id
      i.save
    end
    remove_column :old_models, :address
  end

  def down
    add_column :old_models, :address, :string
  end
end

虽然NewModel.create运行良好并获得了正确的数据,但i.save似乎没有工作,因为old_models.new_model_id没有被填充。

我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-09-22 12:54:14

对我来说,这听起来像是验证失败了,尽管它也可能是阻止保存的before_* callback。没有OldModel代码,我无法进一步推测。

当您期望它失败并且您计划检查返回值时,调用save;当您期望它成功时,调用save!,希望得到一个异常。我在这里使用save!,因为如果保存失败,我希望迁移失败。

另外:您的迁移在up中将数据从OldModel复制到NewModel,但在down中不会以相反的方式复制数据。在此配置中,rake db:migrate:redo将成功,但会以静默方式丢弃信息。如果这些信息对您很重要,我建议您a)通过将数据复制回来进行双向迁移,或者b)删除down,以便Rails知道它无法撤消。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12540441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档