Kom*_*mbo 3 ruby routing nested ruby-on-rails
我在嵌套源Product上遇到了与destroy方法有关的问题,它与Orders绑定.
在尝试销毁某个项目后,我将用户重定向到我的order_products_url.我收到以下路由错误:
No route matches "/orders/1/products"
Run Code Online (Sandbox Code Playgroud)
我的destroy方法看起来像这样:
def destroy
@product = Product.find(params[:id])
@order = Order.find(params[:order_id])
@product.destroy
respond_to do |format|
format.html { redirect_to(order_products_url) }
format.xml { head :ok }
end
end
Run Code Online (Sandbox Code Playgroud)
并在routes.rb中:
resources :orders do
resources :products, :controller => "products"
end
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑的原因是我的产品更新方法,我正确地将用户重定向到order_products_url而没有问题.我不明白为什么它在那里工作但不在这里.
谢谢
order_products_url期望传递参数 - 订单ID或订单对象本身.没有它,它将无法正常工作.所以使用上面的代码:
def destroy
@product = Product.find(params[:id])
@order = Order.find(params[:order_id])
@product.destroy
respond_to do |format|
format.html { redirect_to(order_products_url(@order) }
format.xml { head :ok }
end
end
Run Code Online (Sandbox Code Playgroud)
作为旁注,您可以稍微缩短路线:
resources :orders do
resources :products
end
Run Code Online (Sandbox Code Playgroud)
当命名为Rails期望时,指定控制器是多余的.我希望这有帮助!
更新:我在Rails 3中添加了一篇关于路由的文章链接,其中包含可下载的代码示例.我在"您应该知道的事情"部分中更新了一个解释命名路线的段落:
| 归档时间: |
|
| 查看次数: |
8236 次 |
| 最近记录: |