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这样做,我该怎么做?
答案 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/asdf
与 GET /posts/:id(.:format)
的路线匹配并使用“asdf”作为 :id
参数,从而尝试调用从 {{1} 连接的 show
方法}} 控制器助手。
如果包含第二个斜杠(例如 resources
),它将不再与显示路由匹配,然后将使用全局路由。