'items_new_path'与'new_items_path'有什么不同?

时间:2015-12-04 14:21:50

标签: ruby-on-rails ruby-on-rails-4 url-routing requestdispatcher

我注意到Rails路由调度程序中出现了意外行为,我想知道这是否违反了“最少惊喜原则”。

resources :items, only: [:index, :new]中定义RESTful路由时,我们可以按预期获得这​​些路由:

  Prefix Verb URI Pattern          Controller#Action
   items GET  /items(.:format)     items#index
new_item GET  /items/new(.:format) items#new

应该使用以下两行来手动定义每条路线:

get '/items' => 'items#index'
get '/items/new' => 'items#new'

现在,两者的第一行完全相同,事实上如果你试图定义resources :items, only: :indexget '/items' => 'items#index'一个命名路由被另一个“掩盖”:

Prefix Verb URI Pattern      Controller#Action
 items GET  /items(.:format) items#index
       GET  /items(.:format) items#index

但第二行给出了另一个结果:items_new GET /items/new(.:format) items#new

尝试定义两种方式,并为同一URI获得两个命名路由:

   Prefix Verb URI Pattern          Controller#Action
 new_item GET  /items/new(.:format) items#new
items_new GET  /items/new(.:format) items#new

那么为什么辅助方法会改变?此外,在定义每条路线时,您甚至无法获得editshow行动的命名路线(请亲自尝试)。

关键字resources不应只是一种快捷方式,以避免为indexshownewedit,{{1}声明单独的路线}},createupdate操作(正如in the doc所述)?

0 个答案:

没有答案
相关问题