Rails - 如何从数据库中的数据中删除斜杠字符?

时间:2010-12-28 19:47:40

标签: ruby-on-rails

我有一个应用程序,我已经从另一个cms转换过来。旧的URL存储在数据库中,如下所示:

/this-is-an-old-permalink/

我需要它们是这样的:

this-is-an-old-permalink

注意没有正斜杠。删除它们最简单的方法是什么?

我不一定要找到确切的代码(尽管那很好!) - 我也要问Rails newb:最好的方法是什么关于做这样的事情?我只是真正使用Rails来设置模型,控制器,视图和输出数据。我没有必要做这样的处理。它会进入模型吗?任何帮助表示赞赏!


修改

我是否需要获取所有记录,循环访问它们,对该字段执行正则表达式然后保存它?

1 个答案:

答案 0 :(得分:4)

由于您可能只打算写一次,最好的办法是在lib中为它创建一个脚本,或者为它编写一个迁移。我建议使用后者,因为如果您以后从旧备份恢复,它将随rake db:migrate自动执行。然后,您可以在迁移过程中使用所有标准模型处理技巧(就像在控制器上使用的那样),而不会将替换代码暴露给Controller。

编辑:

您可以将以下内容添加到lib / tasks中的新文件中,为此创建一个新的rake任务db:substitute_slashes:

namespace :db do
  desc "Remove slashes from old-style URLs"
  task :substitute_slashes => :environment do
    Modelname.find(:all).each do |obj|
      obj.fieldname.gsub!(/regex here/,'')
      obj.save!
    end
  end
end

保存结束时的感叹号!意味着如果生成的对象验证失败,它将抛出异常,在这种情况下检查是一件好事。

然后,您可以使用命令rake db:substitute_slashes执行此操作。