0

我在名为“通知”的表中有一个名为“元”的列。列中的数据如下所示:

---
:full_name: Dude
:user_id: 1
:update_id: 10
:update_type: want
:update_name: Some name here

我希望它变成这样的东西:

---
:full_name: Dude
:user_id: 1
:post_id: 10
:post_type: want
:post_name: Some name here

实现这一目标的迁移会是什么样子?

4

1 回答 1

2
def up 
  execute "update notifications set meta = replace(meta, 'update', 'post')"
end

我不完全确定双引号/单引号,因为我看到有时即使在同一 SQL 引擎的不同版本中,两者有时也会失败。

使用 SQL 迁移数据通常是一个好主意,因为您的 ruby​​ 模型可能会随着时间的推移而改变并导致您的迁移无法使用,例如由于更改的验证约束。红宝石中的相同看起来像

def up
  Notification.find_each{ | n | n.update_attribute(:meta, n.meta.gsub('update','post')) }
end
于 2013-11-03T01:05:29.713 回答