[英]Rails 3 - Nested Resources - Routing
我在嵌套源Product上遇到了與destroy方法有關的問題,它與Orders綁定。
在嘗試銷毀某個項目后,我將用戶重定向到我的order_products_url。 我收到以下路由錯誤:
No route matches "/orders/1/products"
我的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
並在routes.rb中:
resources :orders do
resources :products, :controller => "products"
end
這讓我感到困惑的原因是我的產品更新方法,我正確地將用戶重定向到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
作為旁注,您可以稍微縮短路線:
resources :orders do
resources :products
end
當命名為Rails期望時,指定控制器是多余的。 我希望這有幫助!
更新:我在Rails 3中添加了一篇關於路由的文章鏈接,其中包含可下載的代碼示例。 我在“您應該知道的事情”部分中更新了一個解釋命名路線的段落:
你不需要重定向到order_products_url(@order)嗎?
你應該使用orer_products_path(而不是url)。 如果您轉到應用的根目錄並輸入,
rake routes
這將為您提供所有命名路線的列表。 您需要將_path附加到它們(返回字符串表示)。 這是一個方便的小技巧,用於計算命名路線。
現在回答你真正的問題 - 當然它不存在! 你剛刪除它! 您正在銷售產品而不是訂單中的產品!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.