Ruby on rails 3 Rails嵌套的单一资源路由Appending.ID

Ruby on rails 3 Rails嵌套的单一资源路由Appending.ID,ruby-on-rails-3,routes,Ruby On Rails 3,Routes,我有以下嵌套的单数路径: 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 现在,当我重定向

我有以下嵌套的单数路径:

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
现在,当我重定向到编辑\u列表\u徽标\u路径时

redirect_to edit_listing_logo_path( @listing, @logo )
或者当我创建一个更新表单时

<%= form_for [ @listing, @logo ] do |f| %>
我还没有在这个应用程序中使用响应格式,所以它工作正常。但是这个链接生成看起来很奇怪,如果与各种响应格式一起使用,我希望它会导致问题

注意,这里也讨论了这一点,但我根本没有使用“show”路径


谢谢你的意见

我相信您可以通过使用详细路径方法
编辑列表图标路径(@listing)
(如@Martin Sojka所述)或使用符号而不是对象本身来获得所需的答案

因此,不要使用标准形式:

form_for [ @listing, @logo ]
您可以通过写入以下内容来处理对象特定性(和尾随ID):

form_for [@listing :logo]
如果要在控制器上调用另一个操作,可以在数组中为其添加前缀:

form_for [:edit, @listing :logo]

希望它对你有用-它似乎解决了我的问题

“编辑”和“显示”路径的工作方式相同,因此您已经在您提到的问题中获得了所需的一切!为什么它们会以同样的方式工作?很抱歉,这只是您答案的第一部分:您可以使用
重定向\u编辑\u列表\u徽标\u路径(@listing)
,因为如果您选中以下行:
编辑\u列表\u徽标获取/列表/:列表\u id/logo/edit(:format)徽标\35; edit
,您可以看到:路径中不需要徽标\u id。对于第二部分,您可以添加显示路径并使用@Bryan Marble answer。好的。。在重定向中,这可以
edit_listing_logo_path(@listing)
并且有意义,因为我们不需要logo的ID。但是我必须将@logo的表单帮助代码更改为
form_,url:listing_logo_path(@listing),method::put
。这将生成正确的/listings/2/logo放置操作。IMO
form_for[@listing,@logo]do | f |
也应该生成相同的链接,所以我认为这是一个bug。在这种情况下,删除@listing或@logo没有帮助,因为它在这两种情况下都试图生成非嵌套路由。是的,它使用第二个对象的id并将其作为请求URL的格式附加。对象id是不必要的,因为它是一个单一资源。我认为您在第2个和第3个示例中缺少了一个
。另外,在Rails 5中,无论是否使用逗号,它似乎都不起作用。
form_for [:edit, @listing :logo]