2013-08-03 53 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。