2.3和4.2.6路由的区别

Differences betwen 2.3 and 4.2.6 routing

在 2.3 中,有

  map.connect ':controller/:action/:id'

我尝试访问例如“/resource/edit”,找到控制器资源和操作编辑没有问题。

在4.2中,我使用

  get ':controller/:action/:id'

“/resource/edit”不起作用。我猜是因为没有 :id?

如果我改成

get ':controller/:action(/:id)'

这使得 :id 可选,然后一切正常。

所以我的问题是:

1) 我的猜测正确吗?即:对于 2.3 你不需要定义 optional,它将是可选的,但是对于 4.2 你必须定义 optional 使其成为可选的。

2) 对于 2.3,一次

  map.connect ':controller/:action/:id'

已定义,是否为所有 GET/POST/PATCH/DELETE 等定义?对于 4.2,我必须定义以下内容?

get ':controller/:action(/:id)'
post ':controller/:action(/:id)'

等等一一?

  1. 还有什么你能想到的其他重大差异吗?

谢谢。

(1) 是的,这是正确的。

(2) 使用足智多谋的路由替代在同一路由上定义、GET、POST、PATCH、DELETE:

resources :resource_name

这将定义 new (GET)、create (POST)、edit (GET)、update (PUT/PATCH ),以及名为 resource_name 的模型的 destroy(删除)操作。 Rails 文档在这里有更好的解释:http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions.

(3) 可能还有其他差异,尽管自从我使用 Rails 2.x 以来已经有一段时间了。我建议您习惯 Rails 3+ 的路由方案,因为它们在如何为您的路由定义 HTTP 动词方面更加严格。