我有以下网址/purchases/3/payments/new
,我通过
link_to 'pay', purchase_path(purchase)+new_payment_path
现在在支付控制器中,我需要拥有购买对象,或者至少从调用它的位置获取其ID。 我尝试使用param,但还有其他方法吗? 感谢
答案 0 :(得分:2)
使用params是有道理的。
您应该能够在支付控制器中获得这样的购买ID:
params[:purchase_id]
但是,需要以特定方式设置路线才能执行此操作:
resources :purchases do
resources :payments
end
然后你可以在视图中创建这样的链接:
link_to 'pay', new_purchase_payment_path(purchase)
也可以查看这些文档:http://guides.rubyonrails.org/routing.html#nested-resources
答案 1 :(得分:0)
<强>路线强>
我立即强调这是一个问题:
purchase_path(purchase)+new_payment_path
这非常糟糕(超出约定的配置) - 使用实际的路径助手加载所需的资源(保持干燥和传统)会更好
-
<强>嵌套强>
如Jon M
所述,您的解决方案将来自nested resources
的使用:
#config/routes.rb
resources :purchases do
resources :payments # -> domain.com/purchases/:purchase_id/payments/new
end
这将允许您使用Jon
所述的路径路径。
-
<强>控制器强>
在支付控制器中我需要有购买对象, 或其ID
通过使用嵌套资源,如上所述,该路线将点击您的payments
控制器并提供以下param
:
params[:purchase_id]
注意 param的命名(只有nested
资源标识为params[:id]
),如所示in the docs:/magazines/:magazine_id/ads/:id
我建议您在控制器中使用以下代码:
#app/controllers/payments_controller.rb
class PaymentsController < ApplicationController
def new
@purchase = Purchase.find params[:purchase_id]
end
end