【问题标题】:Rails 5.1: Globbing doesn't work?Rails 5.1:通配不起作用?
【发布时间】:2017-05-26 06:21:08
【问题描述】:

routes.rb

resources :posts
get '/posts/*missing', to: 'posts#missing'

/posts/1 重定向到 posts#show,但 /posts/asdf 不重定向到 posts#missing
Globbing 在这里不起作用。为什么? 我使用的是 Rails 5.1,看到了一个关于 5.0 的教程,配置完全相同,并且 globbing 捕获了无效的 ID。
我知道我可以使用rescue_from,但我想通过 routes.rb 来实现,我该怎么做?

【问题讨论】:

  • 您是否遗漏了路线中的单引号或拼写错误?
  • 向我们展示该教程。

标签: ruby-on-rails routing


【解决方案1】:

我使用的是 Rails 5.1,看到一个关于 5.0 的教程,配置完全相同,并且 globbing 捕获了无效的 ID。

我认为这不适用于早期版本的 rails(当然不是 5.0)。来自帖子资源的show 路由匹配/posts/asdf 路径,并尝试将Posts#show"asdf" 呈现为id。长久以来就是这样。

【讨论】:

  • 你是对的!将get 路由放在resources :posts 上方应该可以修复错误。不是吗?
  • 哦!我认为通过颠倒顺序可以修复错误,因为 Rails 从顶部开始匹配路由。
【解决方案2】:
resources :posts, except: :show
get 'posts/*missing/', to: 'posts#missing'

【讨论】:

【解决方案3】:

EDT - 刚刚测试,并意识到这可能会覆盖一些有效路线 - 不确定 OP 问题的最终答案。

路由文件中的方法顺序似乎在这里起作用。 我在拥有(在 routes.rb 文件中)时遇到了同样的错误:

  resources :posts
  get 'posts/*missing', to: 'posts#missing'

改成后

  get 'posts/*missing', to: 'posts#missing'
  resources :posts

它有效:)

【讨论】:

    【解决方案4】:

    我也偶然发现了这个。您的 url posts/asdfGET /posts/:id(.:format) 的路由匹配,并使用“asdf”作为 :id 参数,因此尝试调用从 resources 控制器助手连接的 show 方法。

    如果您包含第二个斜杠(例如posts/asdf/asdf),它将不再与显示路由匹配,然后将使用全局路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2016-01-03
      • 2018-10-24
      • 2016-01-28
      • 2016-10-20
      • 2017-02-27
      • 2015-10-16
      相关资源
      最近更新 更多