2013-08-03 24 views
0

我定义嵌套资源这样如何使用Ruby on Rails的命名路由

resources :item, :only => [:create, :destroy, :update] do 
    resources :item_image, :only => [ :new, :create, :show , :destroy, :index] 
end 

我的路线是这样的(耙路输出)

item_item_image_index GET /item/:item_id/item_image(.:format)  item_image#index 
        POST /item/:item_id/item_image(.:format)  item_image#create 
new_item_item_image GET /item/:item_id/item_image/new(.:format) item_image#new 
    item_item_image GET /item/:item_id/item_image/:id(.:format) item_image#show 
        DELETE /item/:item_id/item_image/:id(.:format) item_image#destroy 

我想到的第一列输出是“命名路线”。

我想在我的一个视图中显示/item/:item_id/item_image(.:format)的路径。

item_item_image_index GET /item/:item_id/item_image(.:format)  item_image#index 

我尝试这样做:

<%= link_to "users", item_item_image_index %> 

而且这个

<%= link_to "users", item_images_path %> 

无论工作

我“未定义局部变量或方法`item_images_path/item_item_image_index”错误

回答

1

你应该尝试:

<%= link_to "users", item_item_image_index_url(@item) %> 

<%= link_to "users", item_item_images_url(@item) %> 

<%= link_to "users", item_item_image_index_path(@item) %> 

<%= link_to "users", item_item_images_path(@item) %> 

不要忘记了URL需要一个:ITEM_ID,因此你需要作为参数传递一个项目。

实际上,您应该避免将该模型命名为“ItemImage”。一个项目有图像,这就是你需要知道的。你会得到像“item_images_url”

+0

谢谢你,那有效。还有一个问题,为什么我的路由中的POST DELETE路由没有得到自动生成的路径名? – GingerJim

+0

没关系,想通了我的自我。它们都有相同的路径,唯一不同的是HTTP动词。准确地说是 – GingerJim

+0

。 url助手很适合定位标记。 POST/PUT/DELETE方法通常包含一个表单,在这个表单中,你必须明确指出(取决于表单助手)与URL一起的HTTP动词。 (我假设你没有使用可怕的Rails js hacks作为anchor标签:remote => true) – ChuckE

1
item_item_image_index GET /item/:item_id/item_image(.:format)  item_image#index 

在这条航线item_item_image_index好帮手的名字,你在url

让您有一个名为作为@item项目模型的对象需要一个item_id,那么你的链接将

<%= link_to 'users', item_item_image_index_path(@item) %> 

这里您需要添加路由帮手“item_item_image_index”后“_path”。在传递@item变量时,它将以@item.iditem_id并完成链接的URL。