新手问题 使用 rails 的 migration 怎样将一个表中数据复制到另一个表

flypiggys · 发布于 2012年09月16日 · 最后由 fsword 回复于 2012年09月16日 · 1834 次阅读
3444

将product中的price复制到line_item中,我是这样写的。

class AddPriceToLineItem < ActiveRecord::Migration
  def change
    add_column :line_items, :price, :decimal
    LineItem.all.each do |li|
      li.price = li.product.price
    end
  end
end

但是实际中发现li.price是得到了值的

p li.price   #<BigDecimal:99ca80c,'0.4375E2',18(45)>

但是line_items表中却没有数据

p LineItem.all
[#<LineItem id: 4, product_id: 2, cart_id: 3, created_at: "2012-09-15 17:48:50", updated_at: "2012-09-15 17:48:50", quantity: 1, price: nil>, #<LineItem id: 5, product_id: 3, cart_id: 3, created_at: "2012-09-15 17:48:55", updated_at: "2012-09-15 17:48:55", quantity: 1, price: nil>]

请问是何原因,如果想通过migrate复制表中的数据正确应该如何写?

共收到 4 条回复
8
  1. 你没li.save
  2. 别在migration里写这个
3444

#1楼 @hooopo 谢谢,已解决。是学rails时遇到的一个migration练习。数据库变更时对老的数据做一个兼容的处理,除了在执行迁移的时候做一个批量处理,还有什么更好的方法?

522

#2楼 @flypiggys

将你的迁移写到 lib/tasks/下

task :your_task => :environment do #do something end

rake your_task

244

#2楼 @flypiggys Migration的设计关键不是"批量处理”,而是"可回溯",如果你用change,最好确保里面的代码是可以revert的,否则难免滥用

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册