Rails 5.1:Globbing不起作用?

时间:2017-05-26 06:21:09

标签: ruby-on-rails routing

routes.rb

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

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

4 个答案:

答案 0 :(得分:1)

  

我正在使用Rails 5.1,看到5.0上的教程使用完全相同的配置,并且globbing捕获了无效的ID。

我认为这不适用于早期版本的rails(当然不是5.0)。来自帖子资源的show路由与/posts/asdf路径匹配,并尝试使用Posts#show为ID呈现"asdf"。这就是很长一段时间以来的情况。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

更改为

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

有效:)

答案 3 :(得分:0)

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

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