【问题标题】:Define custome routes in ruby on rails在 ruby​​ on rails 中定义自定义路由
【发布时间】:2019-10-10 13:36:40
【问题描述】:

我想用单个控制器和函数处理多个 url 段 这是一个例子:

1) https://www.somedomain.com/abc

2) https://www.somedomain.com/xyz/abc

我怎样才能在一行中定义路由,所以两个请求都可以用一个函数来执行

像这里我需要定义两条路线 获取“/:static_page”,到:“SomeController#action_name”

get "/:static_page/:second_option", to: "SomeController#action_name"

但是我怎样才能在一行中定义呢?或者可以以任何其他方式管理这种方法。

【问题讨论】:

  • 第一段总是一样的吗?例如,路线是否总是/xyz/:something,而/xyz/ 总是相同的?还是网址的两个部分都会改变?
  • 是的,这两个部分都会改变。

标签: ruby-on-rails routes ruby-on-rails-5 custom-routes


【解决方案1】:

它被称为包罗万象,是一种自爆的绝妙方法。

match '*path', to: 'some#action_name'

您必须非常注意排序(最后声明它),因为它会捕获与该模式匹配的任何其他路由 - 在这种情况下是所有内容。

它也是一个巨大的错误来源,因为 Rails 现在会接受向它抛出的任何请求并将其传递给您的控制器,而不是引发路由错误。例如,那些讨厌的机器人会在您的网站上寻找 WordPress 漏洞。

如果您真的需要一些额外的非 RESTful 路由,只需正常声明它们,而不是将所有内容集中到将成为控制器的怪物中。

【讨论】:

  • 是的,上面的解决方案通过方法解决了我的问题。我刚刚提到了匹配 "*path", via: "get", to: 'profile#index' in last of Rails.application.routes.draw do block 所以现有路径都不会被覆盖。
  • 它是一个解决方案,但不是一个很好的解决方案。如果您有任何其他选择 - 接受吧。
  • 是的,感谢您的建议,您是对的,它可能很容易受到攻击,但就我而言,没关系,因为我没有使用任何 API 服务,也没有创建任何 API,我也没有其他解决方案这次。
猜你喜欢
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多