【问题标题】:How to handle routing error in Rails 4 with alchemy cms gem?如何使用炼金术 cms gem 处理 Rails 4 中的路由错误?
【发布时间】:2016-03-23 09:54:40
【问题描述】:

所以在我们的 Rails 4.2 应用程序中,有一个 alchemy_cms gem,它要求在 config/routes.rb 中最后安装它的路由。

SampleApp::Application.routes.draw do
  #other routes for the rails app here
  # :
  # :
  mount Alchemy::Engine => '/'
end

我们得到像“/somehacker/routingurl”这样的路由,然后由 Alchemy::Engine 处理,导致默认的 500 错误。如果我想做一个自定义 404 错误,那么正确的方法是构建一个自定义 404 页面并让 Alchemy 处理重定向?否则,由于 Alchemy 文档指定它必须是 config/routes.rb 中的最后一条路由,因此无法添加一条包罗万象的路由以重定向到我认为的某种错误页面。

编辑:

其中一个问题是,有些路由类似于上面的无效“somehacker”路由,确实需要由 Alchemy 路由引擎解析,例如“/en/us”,其中“en”是有效的语言环境。这就是为什么我最初想将路由处理放在 Alchemy 引擎的路由文件中。

【问题讨论】:

标签: ruby-on-rails alchemy-cms


【解决方案1】:

如果您难以配置和使用 Alchemy cms gem 将未知路由重定向到自定义页面,您可以使用下面的方法通过下面给出的小编码调整来实现相同的功能:

Rails 4.XXX

1.第一种方法。

(routes.rb)

您仍然可以使用简单的get 重定向所有未知路由。

  get '*path', to: 'home#index'

如果您希望为 POST 和 GET 请求提供路由,您仍然可以使用 match,但 Rails 希望您通过 via 指定请求方法。

  match "*path" => "home#index", via: [:get, :post]  

请记住,routes.rb 是按顺序执行的(匹配符合所提供路径结构的第一个路由),因此将通配符捕获放在匹配的底部。

您可以在此处将 home#index 替换为您在应用程序中定义的任何自定义路径,还请注意,将此重定向代码仅保留在 routes.rb 的底部很重要。

2。您可以按照下面的教程从不同的角度解决相同的问题。

Custom 404 error page with Rails 4

【讨论】:

  • 谢谢...一件事 - 因为 Alchemy CMS 允许您使用自己的路由创​​建自定义 CMS 页面,我想我需要先让 routes.rb 访问已安装的 Alchemy Engine 路由,然后再执行用于重定向所有未知路由的通配符路由...或者我不理解您的回复?
  • @Nona :其实我以前没有使用 Alchemy Engine 的经验,但是您需要将所有未知/未定义的路由重定向到您自己选择的自定义页面,对吗?为此,有一些替代且非常简单的方法可以实现这一目标,因此我在回答中给出了其中两种方法,您可能会也可能不会遵循它们。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 2014-04-21
相关资源
最近更新 更多