创建一个表单来在控制器内部路由方法

时间:2016-09-11 00:51:42

标签: ruby-on-rails ruby

我正在尝试创建一个表单,该表单重定向到表单控制器上名为accept_item的方法。我的问题是,当我提交表单时,它不会通过accept_item方法。

form_controller.rb

def accept
    @form = Form.find(params['id'])
end
def accept_item
    redirect_to inventories_path
end

accept.html.erb

  <%= form_tag accept_item_forms_url do %>
      <% @form.items.each do |i| %>
          <%= label_tag 'Item Name' %>
          <p><%= i.name %></p>
          <%= label_tag 'Quantity' %>
          <p><%= text_field_tag 'quantity', i.quantity %></p>

      <% end %>
      <%= submit_tag 'Accept', class: 'btn btn-default btn-about pull-left', data: {confirm: 'Are you sure you want to accept?'} %>
  <% end %>

的routes.rb

  resources :forms do
    collection do
      get :accept_item, :as => :accept_item
    end
  end

错误消息

No route matches [POST] "/forms/accept_item"

2 个答案:

答案 0 :(得分:1)

form_tag帮助程序默认使用HTTP POST方法。您使用get定义了路线:

get :accept_item, :as => :accept_item

您应该使用post代替:

post :accept_item, :as => :accept_item

此外,我认为您不需要as: :accept_item部分,除非您使用accept_item_url代替accept_item_forms_url

答案 1 :(得分:0)

只需删除:as => :accept_item,然后将方法更改为post

post :accept_item

使用/foo时,您将获得:as => 'foo'