使用respond_with的Rails嵌套资源删除操作

3

嵌套资源删除操作适当的respond_with行是什么?

我的路由:

resources :vendors do
  resources :products, :except => [:index]
end

Product#destroy(注意,在这里省略了使用before_filter找到的@vendor@product

def destroy
  @product.destroy 
  respond_with @vendor, @product
end

根据我的功能测试,这个返回的是/vendors/X/products/X而不是/vendors/X。我应该将其更改为只有responed_to @vendor吗?
2个回答

5

我相信Rails足够智能,如果@product被销毁,它会明白该怎么做。

respond_with [@vendor, @product]

如果不行,那就试试这个。
respond_with @product, :location => vendor_path(@vendor)

是的,你说得对!respond_with @vendor, @product, :notice => 'Product Deleted'就足够了(注意没有数组)。 - mikeycgto
@Eduardo Rdm,@vendor 和 @product 是在一个 before_filter 中找到的,但这里被省略了。 - fl00r
第一个例子将我带到了 /vendors/XXX/products,但是由于我在 Products 上没有索引路由,该路由并不存在。我猜我需要使用第二个例子... 有人有 respond_with 的 API 文档链接吗? - mikeycgto
当然使用第二个变体。http://apidock.com/rails/ActionController/MimeResponds/respond_with - fl00r
能够使用 respond_with @vendor, @product, :location => vendor_url(@vendor) 只是感觉更加一致。我需要找到一个列出所有可用选项的良好文档来使用 respond_with。感谢你们两个的帮助! - mikeycgto
@mikeycgto,看一下这个网站http://railscasts.com/episodes/224-controllers-in-rails-3。 - fl00r

2

抱歉,之前的回答完全错误(误解了您的问题):

您的销毁代码可以像这样:

def destroy
  @product = Product.find(params[:id])
  @product.destroy 
  redirect_to <route method for vendor's products index>, :notice => 'Any message'
end

在终端中键入rake routes,即可查看确切的路由信息。

params[:vendor_id] 也应该是可用的。


我没有产品索引,所以我想vendor_url(@vendor)应该就足够了吧? - mikeycgto
是的,那样也可以。或者你只需使用 @vendor,不需要使用 helper 方法。 - user668531
你需要找到 _at_vendor 或使用 _at_product.vendor。 - user668531

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接