0

我试图弄清楚如何运行将字符串添加到列开头的迁移。在这种特定情况下,我有一个名为的列,该列url当前存储域之后的所有内容(例如/test.html)。但是我现在想http://google.com在 url 的开头添加一个字符串。在本例中,该条目的 url 的结果字符串值为http://google.com/test.html.

我如何通过迁移来实现这一点?

4

2 回答 2

3

我不确定这是否真的有资格进行迁移;通常,迁移会更改数据库的结构,而不是更改其中数据的格式。

最简单和最快的方法是根本不用在你的数据库中到处乱跑,而是让该url模型的方法返回类似"http://google.com#{read_attribute(:url)}". 如果您真的想更改数据库中的数据,我会做一个 rake 任务来完成它,例如:

namespace :data do
  task :add_domain do
    Model.each do |model|
      model.url = "http://google.com#{model.url}" if model.url !~ /google\.com/
      model.save if model.changed?
    end
  end
end

如果这必须是您的迁移,那么您的迁移up看起来与该 rake 任务的内部非常相似。(或者它会直接调用那个 rake 任务。)

于 2013-09-03T15:25:08.103 回答
2

您可以使用迁移或 rake 任务来执行此操作。

如果您想将其作为迁移运行,

  def up
   execute("update TABLE set url = 'http://google.com' || url") // '||' concatenates string in postgres. Use the function provided by your database
  end

  def down
    //this is little tricky. I would advice to leave this empty
  end
于 2013-09-03T15:27:40.397 回答