Rails的嵌套奇异资源路由附加.ID

问题描述:

我有以下嵌套的奇异路径: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

我相信你可以通过使用详细路径方法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