簡體   English   中英

Rails 3 - 嵌套資源 - 路由

[英]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中添加了一篇關於路由的文章鏈接,其中包含可下載的代碼示例。 我在“您應該知道的事情”部分中更新了一個解釋命名路線的段落:

Ruby on Rails中的路由3

你不需要重定向到order_products_url(@order)嗎?

你應該使用orer_products_path(而不是url)。 如果您轉到應用的根目錄並輸入,

rake routes

這將為您提供所有命名路線的列表。 您需要將_path附加到它們(返回字符串表示)。 這是一個方便的小技巧,用於計算命名路線。

現在回答你真正的問題 - 當然它不存在! 你剛刪除它! 您正在銷售產品而不是訂單中的產品!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM