在我的脑海中,未经测试,我认为以下方法会起作用:
= link_to 'Create Payment', payments_path(:payment=>{:claim_id=>@claim.id}), :method => :post
在 url 助手中添加一个哈希只是将参数放在 url 上,这将由 rails 解释,就像从表单发布的“正常”参数一样。
这相当于提交一个新的支付表单,所以它会以同样的方式重定向。如果您希望通过 ajax 处理它,只需添加:remote => true
,并确保您的 PaymentsController 上的 create 操作正确响应 javascript。
更新:再次阅读您的问题,您想要已设置 claim_id 的新付款表格吗?
好的,有很多方法可以做到这一点。如果您将参数传递给新操作,您可以从参数中获取 claim_id,就像我在上面展示的创建记录一样:
= link_to 'New Payment', new_payment_path(:claim_id=>@claim.id)
这应该将您链接到 /payments/new?claim_id=123
然后在你的控制器中:
def new
@payment = Payment.new(:claim_id => params[:claim_id])
end
但是,正如评论中指出的那样,更好的方法是将付款嵌套在索赔下:
在您的路线中:
resources :claims do
resources :payments
end
在您的 PaymentsController 中:
before_filter :load_claim
def new
@payment = @claim.payments.build
end
def create
@payment = @claim.payments.build(params[:payment])
...
end
private
def load_claim
@claim = Claim.find(params[:claim_id])
end
在您的链接中:
= link_to 'New Payment', new_claim_payment_path(@claim)
请注意,现在您的付款路径助手将需要其中的声明,即:
= link_to 'Payment', claim_payment_path(@claim, payment)
表单助手也是如此:
= form_for [@claim, @payment] ...