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| %>

生成的链接总是在结尾附加单个资源ID,像这样

/listings/2/logo.1

我没有在这个应用程序中使用响应格式,所以它工作得很好。但是这种链接生成似乎很奇怪,我预计如果与各种响应格式一起使用它会导致问题。

注意,这里也讨论过Rails嵌套单一资源路由,但我根本没有使用'show' path。

感谢您的任何输入。

我相信您可以通过使用详细路径方法edit_listing_logo_path(@listing)(如@Martin Sojka所提到的)或使用符号而不是对象本身来获得所需的答案。

所以不用常规形式:

form_for [ @listing, @logo ]

你可以通过写

来处理对象专用性(和后面的ID):
form_for [@listing :logo]

,如果你想在控制器上调用另一个动作,你可以在数组中加上前缀:

form_for [:edit, @listing :logo]

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

最新更新