Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails迁移预结束列?_Ruby On Rails_Activerecord_Migration - Fatal编程技术网

Ruby on rails Rails迁移预结束列?

Ruby on rails Rails迁移预结束列?,ruby-on-rails,activerecord,migration,Ruby On Rails,Activerecord,Migration,我试图弄清楚如何运行迁移,将字符串前置到列的开头。在这个特定的例子中,我有一个名为url的列,它当前存储域之后的所有内容(例如/test.html)。但是,我现在想在前面加一个字符串http://google.com到url的开头。在本例中,该条目的url的结果字符串值为http://google.com/test.html 如何通过迁移来实现这一点?我不确定这是否真的符合迁移的条件;通常,迁移会更改数据库的结构,而不是数据库中数据的格式 实现这一点最简单、最快捷的方法不是在数据库中到处乱翻,而

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


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

我不确定这是否真的符合迁移的条件;通常,迁移会更改数据库的结构,而不是数据库中数据的格式

实现这一点最简单、最快捷的方法不是在数据库中到处乱翻,而是让该模型的
url
方法返回类似
”的内容http://google.com#{read_属性(: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任务。)

我不确定这是否真的符合迁移的条件;通常,迁移会更改数据库的结构,而不是数据库中数据的格式

实现这一点最简单、最快捷的方法不是在数据库中到处乱翻,而是让该模型的
url
方法返回类似
”的内容http://google.com#{read_属性(: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任务。)

您可以使用迁移或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

您可以使用迁移或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

我建议将其放在迁移中的原因是,向前移动将有不同的域。因此,它不像查找域那样简单,但是是的,我可以添加一个域正则表达式。虽然我喜欢这种方法,但我还是喜欢做一个任务。我建议把它放在迁移中的原因是,向前推进会有不同的领域。因此,它不像查找域那样简单,但是是的,我可以添加一个域正则表达式。虽然我喜欢这种做任务的方法。