2013-01-21 58 views
4

我有以下嵌套的奇異路徑:Rails的嵌套奇異資源路由附加.ID

resources :listings do 
    resource :logo, only: [ :edit, :update ] 
end 

它產生預期2條正確路線:

edit_listing_logo GET /listings/:listing_id/logo/edit(.:format) logos#edit 
listing_logo PUT /listings/:listing_id/logo(.:format) logos#update 

現在,當我重定向到edit_listing_logo_path

redirect_to edit_listing_logo_path(@listing, @logo) 

或當我創建更新表格

<%= form_for [ @listing, @logo ] do |f| %> 

生成的鏈接在末端附着這樣

/listings/2/logo.1 
我不使用,所以它工作正常反應在此應用程序格式尚未

總是奇異資源ID。但是,這個鏈接世代看起來很奇怪,我期望如果使用各種響應格式,它會導致問題。

請注意,這也在這裏討論Rails Nested Singular Resource Routing但我沒有使用'show'路徑。

感謝您的任何輸入。

+0

'編輯'和'顯示'路徑的工作方式相同,因此您在提到的問題中擁有所需的一切! – siekfried

+0

他們爲什麼會以同樣的方式工作? –

+1

對不起,這只是你答案的第一部分:你可以使用'redirect_to edit_listing_logo_path(@listing)',因爲如果你選中這行:'edit_listing_logo GET /listings/:listing_id/logo/edit(.:format)標識#編輯',你可以看到:路徑中不需要logo_id。對於第二部分,您可以添加一個顯示路徑並使用@Bryan Marble答案。 – siekfried

回答

1

我相信你可以通過使用詳細路徑方法edit_listing_logo_path(@listing)(如@Martin Sojka所述)或通過使用符號而不是對象本身來獲得所需的答案。

因此,而不是使用正常形態:

form_for [ @listing, @logo ] 

您可以通過書面形式處理對象的特異性(和尾ID)的:

form_for [@listing :logo] 

,如果你要調用另一個動作在控制器上,你可以將它作爲數組的前綴:

form_for [:edit, @listing :logo] 

希望它適合你 - 我t似乎解決了我的問題。

+0

是的,它使用第二個對象的id並將其附加爲請求URL的格式。對象ID是不必要的,因爲它是單一資源。 – Chloe