Ruby on rails Rails 4路由参数和反向路径

Ruby on rails Rails 4路由参数和反向路径,ruby-on-rails,routes,stripe-payments,Ruby On Rails,Routes,Stripe Payments,我的应用程序环境是Rails 4、Ruby 2.1.8 我正在尝试在列表页面上添加Stripe签出按钮,您可能知道,Stripe的签出不需要与您的数据库进行任何交互,因此没有收费模型。这也解释了为什么示例中用于Stripe JS签出的嵌入式ruby使用form标记方法而不是form for方法 所以我只想传递清单id,并自己保存以供参考。但在我的Rails路线行为中有一些非常奇怪的东西: routes.rb # stripe resources :charges 表单tag in.haml =

我的应用程序环境是Rails 4、Ruby 2.1.8

我正在尝试在列表页面上添加Stripe签出按钮,您可能知道,Stripe的签出不需要与您的数据库进行任何交互,因此没有收费模型。这也解释了为什么示例中用于Stripe JS签出的嵌入式ruby使用form标记方法而不是form for方法

所以我只想传递清单id,并自己保存以供参考。但在我的Rails路线行为中有一些非常奇怪的东西:

routes.rb

# stripe
resources :charges
表单tag in.haml

= form_tag charges_path(@listing.id) do
不管我怎么翻,参数和路径总是相反的

<form method="post" accept-charset="UTF-8" action="/111/charges">

我怎么才能到下面去呢

<form method="post" accept-charset="UTF-8" action="/charges/111">

您需要更改for路径,以便Rails知道您要传递的内容

form_tag charges_path(id: @listing.id)

通常情况下,您会将资源放在路径帮助器中,而不是id中。这会有区别吗?因此
charges\u路径(@listing)
而不是
@listing.id
。还有,你为什么要给charges_path提供一个列表而不是收费作为参数?@Arjan感谢你的快速回复。我尝试了charges\u path(@listing),但仍然是相反的:
我的目标是在列表页面上添加条带签出按钮,正如您可能知道的,条带签出不需要与您的数据库进行任何交互,因此没有费用模型。这也解释了为什么示例中用于Stripe JS签出的嵌入式ruby使用form标记方法而不是form for方法。所以我只想传递清单id并保存它以供参考。清单是什么样子的?如果rails无法确定两者之间的关系,您可能需要执行类似于
charges\u path(id:@listing.id)
的操作。@danielrsmith,谢谢!您的解决方案成功了,
谢谢!你的解决方案奏效了,