Rails嵌套路由前缀谓词问题



我的应用程序按预期工作,但我对嵌套路由有一个问题。在我的路线文件中,我有

resources :lists do
    resources :items
end

当我运行rake时:我得到的路线(缩短以节省空间)

list_items     GET    /lists/:list_id/items(.:format)          items#index
               POST   /lists/:list_id/items(.:format)          items#create
new_list_item  GET    /lists/:list_id/items/new(.:format)      items#new
edit_list_item GET    /lists/:list_id/items/:id/edit(.:format) items#edit
list_item      GET    /lists/:list_id/items/:id(.:format)      items#show

当我学习教程或其他材料时,他们的"前缀动词"只有动作_item(即new_item),表单只有

form_for @item

而不是我的

form_for [@list, @item]

我在想我是错过了什么,还是做错了什么。如有任何帮助或信息,我们将不胜感激。

听起来教程没有使用嵌套路由。在您的路由中,您正在定义列表资源中项目的资源(资源是基于RESTful路由定义的)

所以当

form_for [@list, @item]

它知道要生成表单,它会识别出它是一个嵌套的路由,并且具有扩展到"/lists/:list_id/items/:item_id"之类的路由的路由需要两个id才能知道POST到哪个路由。

如果教程有

form_for [@item]

它不是嵌套的路由,所以路由很可能是

资源:项目并且将生成没有列表的路由(即new_item=>'/item/item_id')这就是为什么你的路线在前缀动词中包含列表的原因。

我现在正在打电话。当我拿到电脑时,我会把打字错误和结构改一下。

最新更新