我正在创建一个显示表格的网页。每条记录的末尾还有四列,它们是用户可以输入数据的文本字段。当用户点击底部的提交按钮时,我想保存所有文本字段中的所有数据并将其添加到我的表中。如何保存所有文本字段的数据?这是我的代码。
<h1>Testing Table</h1>
<form action="/table/" method="POST">
<table>
<thead>
<tr>
<% event_column.each do |header| %>
<th>
<%= header %>
</th>
<% end %>
</tr>
</thead>
<tbody>
<% events.each do |event| %>
<tr>
<% event = event.first(14) %>
<% event.each do |key, value| %>
<td>
<%= value %>
</td>
<% end %>
<td><input type="text" name="event_description"></td>
<td><input type="text" name="event_type">
<td><input type="text" name="event_class">
<td><input type="text" name="issue_expert"></td>
</tr>
<% end %>
</tbody>
</table>
<br/>
<input type="submit">
<% ActiveRecord::Base.clear_active_connections! %>
</form>
我明白我的问题。由于当我尝试在 POST 方法中显示时,我使用相同的变量来写入所有用户输入的列
<td><%= params[:event_description] %></td>
它只会显示最后输入的值,因为它正在被重用。无论如何,当我点击提交时,我可以循环遍历所有 html 文本字段并保存所有数据吗?我被困在这里,我已经四处寻找。我了解如何保存最后一行的文本条目,但我不知道如何保存所有文本条目。我是 sinatra 的新手,所以我一定是做了一些根本性错误的事情。
默认情况下,当 Sinatra(使用 Rack)解析表单数据时,如果有任何重复的键,则使用最后一个键并覆盖其他键。但是,如果您使用以以下结尾的名称[]
然后 Sinatra 创建一个包含具有该名称的所有条目的数组。
因此,在您的情况下,您需要更改输入元素的名称:
<input type="text" name="event_description[]">
(其他人也类似)。请注意[]
在名称的末尾。
现在,当您提交表格时,params['event_description']
将是一个包含所有提交给的项目的数组event_description
输入元素。
Sinatra/Rack 查询解析实际上比这更复杂,因此您可以进一步处理您的表单。在你的循环中你可以做这样的事情:
<td><input type="text" name="events[][description]"></td>
<td><input type="text" name="events[][type]">
<td><input type="text" name="events[][class]">
<td><input type="text" name="events[][issue_expert]"></td>
现在,当您提交表单并对其进行解析时,params['events']
将包含一个散列数组,每个散列都有键description
, type
, class
and issue_expert
。然后,您可以迭代该数组并根据需要处理数据。您可能想添加一个隐藏的id
输入每个哈希值以确保每组数据都与正确的记录相关联(它可能看起来像<input type=hidden name="events[][id]" value="<% event.id %>">
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)