Rails迁移到使用相关表中的数据更新数据库table_one

时间:2014-11-08 16:37:43

标签: sql ruby-on-rails migration

我有两张桌子。 Table_1与table_2有1对多的关系。我的目标是使用rails迁移将table_2中的所有数据移动到table_1中新创建的文本列。 我将在使用sqlite进行迁移时执行以下操作。

def up
 sql = "UPDATE table_1 SET column=(SELECT name || ' ' || email FROM       
 table_2 WHERE table2.table_1_id=table_1.id)"
 update (sql)
end 

这样可行,但问题是,table_1中的每条记录在table_2中都有一条或多条相关记录,如何将table_1中的字段设置为table_2中的所有相关记录

2 个答案:

答案 0 :(得分:1)

我会编写一个自定义种子文件并通过rake任务运行它来完成这些数据任务,其实现方式如答案所示:

Adding a custom seed file

因为它是一个rb文件,你可以使用标准模型/循环/活动记录Rails代码,这样可以简化维护关联等。

答案 1 :(得分:1)

最好的选择是在迁移中,除了创建新表的代码,添加代码到" import"从旧表到新表的数据。之后,如果旧表不相关,您可以删除它们。

  def up
    add_column :table1, :newfield, :string

    Table1.all.each do |record|
      record.newfield = record.relation.fields
      record.save!
  end

# Beware that if you need to rollback, it's better to implement a way 
# to revert the changes.
end