当我使用如下构造时:
<table>
<%= f.fields_for :group_locations do |gl| %>
<tr>
<td><%= gl.label :group_id %></td>
<td><%= gl.select :group_id, paths %></td>
</tr>
<% end %>
</table>
我在浏览器(Safari)中为表格中的每一行(<input> is not allowed inside <tbody>. Inserting <input> before the <table> instead.
)收到错误。这是由<input>
之后关联的ID隐藏</tr>
引起的。如何使id <input>
出现在其中一个TD元素中?
答案 0 :(得分:3)
我认为如果手动打印隐藏字段将不会打印。你能试试吗?
<table>
<tr>
<%= f.fields_for :group_locations do |gl| %>
<td><%= gl.hidden_field :id %></td>
<td><%= gl.label :group_id %></td>
<td><%= gl.select :group_id, paths %></td>
<% end %>
</tr>
</table>
答案 1 :(得分:0)
fields_for
方法将隐藏的标识<input>
连接到它捕获的块的末尾。因此,如果您将<% end %>
标记放在第二个</td>
之前,则应该得到您想要的结果。
答案 2 :(得分:0)
这更像是评论(但我似乎无法直接评论)。只是想注意Dogbert的答案对我有用。格式错误的html似乎并不担心大多数浏览器...直到我尝试在IE8中使用jquery ui sortable,这导致了许多问题(包括崩溃)。无论如何,明确地将id包含在td内的隐藏字段中似乎是要走的路。如果对象被持久化,您可能只想考虑这样做(否则隐藏字段没有值,根据您的代码,这可能是也可能不是问题)。添加检查以查看对象是否持久化可能看起来像(在上面的例子中):
<% if gl.object.persisted? %>
<td><%= gl.hidden_field :id %></td>
<% end %>