0

来自 routes.rb 的片段:

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=>"add_rates", :controller=>"templates"}

任何帮助,将不胜感激。

4

1 回答 1

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路线)等路线。

于 2013-05-03T16:34:49.063 回答