带有自定义网址的表单会一直提交给Create方法

时间:2017-08-23 11:09:31

标签: ruby-on-rails ruby forms routes rails-routing

我正在尝试构建一个将一些参数传递给控制器​​的简单表单。

以下是我所拥有的:

<%= form_tag({url: order_pizza_path}, method: :post) do %>
  <%= hidden_field_tag :id, value: 0, name:"tag-1" %>
  <!-- hidden field is then filled in with js -->
  <%= submit_tag "Submit" %>
<% end %>

<!-- routes: -->
get 'pizza/new' => 'pizza#new', as: 'new_pizza'
post 'pizza' => 'pizza#create', as: 'create_pizza'
post 'order_pizza' => 'pizza#order', as: 'order_pizza'

但是当我提交时,它一直试图指向我的Pizza控制器中的Create方法。我一直收到以下错误:

ActionController::ParameterMissing in PizzaController#create
param is missing or the value is empty: pizza

表单的网址为/pizza。这是错误的网址:/pizza?method=get&url=%2Forder_pizza

即使我将其更改为GET请求而不是POST,也会发生这种情况。为什么我的浏览器会继续尝试使用Create方法?

1 个答案:

答案 0 :(得分:2)

正确的语法是

form_tag(order_pizza_path, method: :post)

form_tag({url: order_pizza_path}, method: :post)

{url: order_pizza_path}不是有效的url_for_options,因此form_tag将提交默认设置,即create操作。

url_for_options的有效值为

{action: 'order'}