我有一个应用程序,我已经从另一个cms转换过来。旧的URL存储在数据库中,如下所示:
/this-is-an-old-permalink/
我需要它们是这样的:
this-is-an-old-permalink
注意没有正斜杠。删除它们最简单的方法是什么?
我不一定要找到确切的代码(尽管那很好!) - 我也要问Rails newb:最好的方法是什么关于做这样的事情?我只是真正使用Rails来设置模型,控制器,视图和输出数据。我没有必要做这样的处理。它会进入模型吗?任何帮助表示赞赏!
修改
我是否需要获取所有记录,循环访问它们,对该字段执行正则表达式然后保存它?
答案 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执行此操作。