【问题标题】:Rails 3 Form fields not submitting paramsRails 3表单字段未提交参数
【发布时间】:2023-08-15 23:25:01
【问题描述】:

我正在为我正在使用的一个列出企业的应用程序构建一个管理部分。然后管理员可以进入并提交电子邮件地址并激活业务。所以我在这样的块中使用 form_tag:

<% for business in @businesses %>   
<tr>
    <td align="center" class="border-table"><%= business.id %></td>
    <td align="center" class="border-table"><%= business.name %></td>
    <td align="center" class="border-table"><%= business.address %></td>
    <td align="center" class="border-table"><%= business.phone %></td>
    <% @user = User.new %>
    <%= form_tag "/businesses/activate?business_id=#{business.id}", :remote => true, :method => :put do %>
        <td align="center" class="border-table" id="<%= business.id %>_email"><%= text_field_tag "email", nil, :placeholder => "email" %></td>
        <td align="center" class="border-table" id="<%= business.id %>_activate"><%= submit_tag "Activate" %></td>
    <% end %>
  </tr>
<% end %>

所以在给定的管理页面上有 25 个这样的表格,表格中的每一行一个。

问题是,无论出于何种原因,“电子邮件”参数都没有发布,只有 business_id(来自路径)。

我做错了什么吗?你不应该使用一个块来生成多个相似的表单吗?

任何建议将不胜感激。

谢谢!

【问题讨论】:

  • 您是否尝试过查看源代码以查看电子邮件输入的呈现方式?
  • 我有,我觉得很好:
  • 另外你为什么使用查询字符串来传递business_id?这绝对不是 Rails 方式。
  • @Ryan 这也不是 Rails 方式。您应该使用/businesses/:business_id/activate 作为表单的目标。查看生成的控制器并按照 Rails 的方式进行操作。如果您不打算遵循 Rails 约定,那么使用 Rails 真的没有意义。
  • 啊,太好了,谢谢!我已经更新了我的路线以使其如此。我也弄清楚了导致问题的原因(请参阅下面的答案)

标签: ruby-on-rails ruby-on-rails-3 forms params


【解决方案1】:

我想通了。似乎大多数浏览器不会传递表单的参数,除非它在 ​​&lt;td&gt; 中,如下所示:

<td align="center" class="border-table" id="<%= rep.id %>_email">
  <%= form_tag activate_rep_path(rep.id), :remote => true do %>
  <%= text_field_tag "email", nil, :placeholder => "email", :index => rep.id %></td>
<td align="center" class="border-table" id="<%= rep.id %>_activate">
  <%= submit_tag "Activate" %>
  <% end %>
</td>

【讨论】:

  • 真的不知道为什么这被否决了。我更新了它,包括 RAILS WAY 路径
  • 跨两个 tds 包装一个表单是不好的(破坏了 HTML 标签的嵌套!)。如果表格包裹整个表格会更好。否则你应该考虑重新构建你的 html 结构。
最近更新 更多