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放置操作。IMOform_for[@listing,@logo]do | f |
也应该生成相同的链接,所以我认为这是一个bug。在这种情况下,删除@listing或@logo没有帮助,因为它在这两种情况下都试图生成非嵌套路由。是的,它使用第二个对象的id并将其作为请求URL的格式附加。对象id是不必要的,因为它是一个单一资源。我认为您在第2个和第3个示例中缺少了一个,
。另外,在Rails 5中,无论是否使用逗号,它似乎都不起作用。
form_for [:edit, @listing :logo]