在没有嵌套路由的情况下传递 id

Passing id without nesting routes

我正在设置条带结帐表单,并希望能够从我的订单模型传递参数,而无需将费用资源嵌套在订单资源中。

在我的订单显示视图中,我有一个 link 收费新视图页面:

<%= link_to 'Checkout', new_charge_path(:order_id => @order.id ) %>

在收费控制器中:

def new
    @order = Order.find_by_id(:id)
end

这是将订单 ID 传递给 charges/new URL。
所以 URL 看起来像这样:/charges/new?order_id=2

在我的 ChargesController 的新方法中:@order = Order.find_by_id(:id) 我假设这将使我能够访问 charges/new 视图中的所有订单模型信息。问题是,如果我尝试将要收取的金额设置为订单模型中设置的总金额,我会收到未定义的方法错误。例如,我在收费新视图中尝试这样做:

<%= @order.total %>

这将引发以下错误:nil:NilClass 的未定义方法“总计” 如果我从视图中删除该行,错误就会消失。我猜这意味着 URL 中可用的订单 ID 没有将任何信息传递给控制器​​。

有人可以帮我了解这里发生了什么吗?

使用params[:id]代替:id:

@order = Order.find_by_id(params[:id])