【问题标题】:Form with custom url keeps submitting to Create method带有自定义 url 的表单不断提交到 Create 方法
【发布时间】:2017-08-23 11:09:31
【问题描述】:

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

这是我所拥有的:

<%= 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&amp;url=%2Forder_pizza


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

【问题讨论】:

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


    【解决方案1】:

    正确的语法是

    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'}
    

    【讨论】:

    • 奇怪,我可以发誓我以前成功地使用过我的语法。谢谢!你知道为什么浏览器默认创建而不是抛出错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多