为什么Rails只列出我的一些路线?

Tha*_*you 5 routes ruby-on-rails

这是我的路线文件

Dumb::Application.routes.draw do

  # an auto-named route
  get '/a/b',            to: 'a#b'

  # apparently not auto-named???
  get '/a/z/:something', to: 'a#z'

end
Run Code Online (Sandbox Code Playgroud)

这是输出 rake routes

a_b GET /a/b(.:format)            a#b
    GET /a/z/:something(.:format) a#z
Run Code Online (Sandbox Code Playgroud)

哇太糟糕了!至少为了一致性的缘故.如果我改变a#z路线

get '/a/z/:something', to: 'a#z', as: "a_z"
Run Code Online (Sandbox Code Playgroud)

rake routes 会显示

a_b GET /a/b(.:format)            a#b
a_z GET /a/z/:something(.:format) a#z
Run Code Online (Sandbox Code Playgroud)

好的,这很好,但不得不说出这样的路线很烦人.

这是唯一的解决方案吗?

Jus*_* D. 2

我的猜测是 Rails 无法为您的路线分配名称,因为它不理解它。通常,您需要这样编写路线:

/a/:id/b/:id  # instead of /a/b/:id which Rails does not understand.
Run Code Online (Sandbox Code Playgroud)

Rails 映射a到一个具有 id 模型实例的控制器:id,并b映射到另一个具有 id 模型实例的控制器:id

/a/b/:id不涉及 Rails 约定中的任何内容。

GET /a/b命名a_b只是 Rails 的一个猜测,但它不可能实现GET /a/z/:something。会是什么?a_z_something