Rails - 处理404s的任何奇特方式?

时间:2011-01-08 22:22:33

标签: ruby-on-rails ruby-on-rails-3 http-status-code-404

我有一个我为一个旧网站构建的rails应用程序,我从另一个cms转换(用非rails语言,呵呵)。大多数旧页面使用routes.rb映射到新页面。但仍然有一些404。

我是一个rails newb所以我问是否有任何先进的方法来处理404s。例如,如果我用我的旧语言编程,我会这样做:

  • 获取正在访问的URL(script_name)并解析它。
  • 在数据库中查找新网址中找到的任何关键字,ID等。
  • 如果找到,则重定向到该页面(或者如果找到多个记录,则在结果页面上显示所有记录并让用户选择)。使用rails我可能想做:status => :move_permanently我在猜?
  • 如果找不到,请显示404。

是否有任何你知道的宝石/插件或教程可以处理这样的事情,如果它甚至可能的话。或者你能从高层次解释如何做到这一点吗?我不需要完整的代码示例,只需向正确的方向推进。

PS。这是一个使用单个内容模型的简单rails 3应用程序。

2 个答案:

答案 0 :(得分:7)

将它放在路线中(在你拥有的每一条路线之后,这将捕获每个网址)

match '*url' => 'errors#routing'

现在在路由操作中的错误控制器中,您可以实现所需的任何奇特逻辑,并始终呈现视图(您可能希望将:status => 404添加到render调用)。请求的网址将在控制器中显示为params[:url]

答案 1 :(得分:0)

有一种丑陋的方式:

render :file => "#{RAILS_ROOT}/public/404.html", :layout => false, :status => 404

也许有人可以找到更好的解决方案。