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) 是的,这是正确的。
(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 动词方面更加严格。
在 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) 是的,这是正确的。
(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 动词方面更加严格。