片段:
resources :templates do
post :add_rates
resources :rates
delete :remove_rate
end
现在我尝试在表单中使用“add_rates”路径。 试过两个:
<%= form_for(@template.template_id, :html => {:class=>"form-horizontal"},:url=> { :action=>:add_rates}) do |f| %>
和
<%= form_tag(:template_add_rates) do %>
但我总是得到:没有路线匹配{:action =&gt;“add_rates”,:controller =&gt;“templates”}
任何帮助都将不胜感激。
答案 0 :(得分:2)
你做错了:
form_for [@template, :add_rates], html: { class: "form-horizontal } do
或
form_for @template, url: template_add_rates_path(@template), html: {class: "form-horizontal" } do
模板及其ID和所需的操作(add_rates)都必须作为相同的参数传入。您不能将模板ID作为第一个参数,然后尝试在其上添加其他URL参数。此外,在这两种情况下,您都缺少URL的关键部分。在第一个中,你只是给它一个ID,:add_rates
; Rails不能使用任意数字,并且知道它是您提供的模板 ID。在第二种情况下,你给它:template_add_rates
;如果没有模板ID,Rails应该如何知道你正在尝试添加费率的哪个模板?您需要将您尝试匹配的路线的所有三个部分都给出:/templates/:template_id/add_rates
。
您发布的代码还存在许多其他奇怪的问题/错误:
@template.template_id
应为@template.id
,除非您明确偏离了Rails的约定,而这些约定几乎不会永远不会。你的路线很奇怪。您不应该添加add_rate
路由,您应该使用嵌套resources :rates
行提供的路由。
您的路线应如下所示:
resources :templates do
resources :rates
end
这为您提供了POST /templates/:template_id/rates
等路线,用于创建费率(而不是add_rate
路线),DELETE /templates/:template_id/rates/:rate_id
用于删除费率(而不是remove_rate
路线)。< / p>