我的应用程序按预期工作,但我对嵌套路由有一个问题。在我的路线文件中,我有
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')这就是为什么你的路线在前缀动词中包含列表的原因。
我现在正在打电话。当我拿到电脑时,我会把打字错误和结构改一下。