我正在尝试创建一个表单,该表单重定向到表单控制器上名为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"
答案 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'
。