Rails3嵌套路由,更新Redirect_To问题

3

我将尝试在更新发票后使我的路由正常工作。

我有一个包含多个发票的订单,并在我的routes.rb文件中设置如下:

resources :orders do
 resources :invoices
end

resources :invoices

在我的发票控制器中:

 def update
    @invoice = Invoice.find(params[:id])
    respond_to do |format|
      if @invoice.update_attributes(params[:invoice])
        format.html { redirect_to(invoice_path(@invoice), :notice => 'Invoice was successfully updated.') }
      else
        format.html { render :action => "edit" }
      end
    end
  end

我可以通过以下方式创建发票:

/orders/1/invoices/new

但是当我保存或更新时,我被发送到:
/invoices/1

我需要重定向回订单发票路径:

/orders/1/invoices/1

我也尝试将重定向更改为:

   redirect_to(order_invoice_path(@order, @invoice), :notice => 'Invoice was successfully updated.')

这个方法可以工作,但是它会把我发送到错误的URL,其中订单ID与发票ID相同...

任何帮助将不胜感激。

-- 更新 --

如果我在我的发票控制器中尝试以下操作,我也会遇到错误...

 redirect_to(order_invoice_path(@order, @invoice)

No route matches {:action=>"show", :controller=>"invoices", :order_id=>nil, :id=>#<Invoice id: 6, order_id: 17, invoice_id: nil, created_at: "2011-06-26 17:49:01", updated_at: "2011-06-26 17:49:01">}
1个回答

2

看起来您在控制器中执行以下操作:

redirect_to(order_invoice_path(@order, @invoice), :notice => 'Invoice was successfully updated.')

但是你有设置@order吗?

无论如何,最好做到:

redirect_to(order_invoice_path(@invoice.order, @invoice), :notice => 'Invoice was successfully updated.')

嗨,非常感谢。后一种方法很完美。我在哪里可以阅读相关内容 - 这真的让我卡住了 - 我一直试图弄清楚如何做这样的事情。Jx - Jenny Blunt
在创建模型之间的关联时,这种方法是内置的:http://guides.rubyonrails.org/association_basics.html - apneadiving

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