我有两张桌子。 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中的所有相关记录
答案 0 :(得分:1)
我会编写一个自定义种子文件并通过rake任务运行它来完成这些数据任务,其实现方式如答案所示:
因为它是一个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