通用路由匹配 ':controller(/:action(/:id))(.:format)' 在 Rails 4 中不可用。出路?

Rus*_*sty 5 ruby ruby-on-rails ruby-on-rails-4

据我所知,Rails 4 不支持match关键字。

但我想创建一个默认的通用路由,如下所示

match ':controller(/:action(/:id))(.:format)', :via => :get
Run Code Online (Sandbox Code Playgroud)

当我在routes.rb中使用上面的代码时,它会抛出以下错误:

Missing :action key on routes definition, please check your routes
Run Code Online (Sandbox Code Playgroud)

有人可以帮我如何在 Rails 4 中实现这一点吗?

Pau*_*lgo 0

是的,支持,来自Rails Routing from the Outside In指南

3.7 HTTP动词约束

一般来说,您应该使用 get、post、put、patch 和 delete 方法来约束到特定动词的路由。您可以使用带有 :via 选项的 match 方法来一次匹配多个动词:

将“照片”匹配到:“照片#show”,通过:[:get, :post]

您可以使用 via: :all: 将所有动词匹配到特定路由:

将“照片”匹配到:“照片#show”,通过::all

并来自文档:

http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Base.html#method-i-match

# sets :controller, :action and :id in params
match ':controller/:action/:id', via: [:get, :post]
Run Code Online (Sandbox Code Playgroud)

如果您将此行添加到您的路线中:

match ':controller/:action/(:id)', via: :get
Run Code Online (Sandbox Code Playgroud)

它将产生以下路线:

Prefix Verb URI Pattern                        Controller#Action
       GET  /:controller/:action(/:id)(.:format) :controller#:action
Run Code Online (Sandbox Code Playgroud)