2

当我使用如下构造时:

<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 元素之一中?

4

3 回答 3

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>
于 2011-07-06T20:42:45.157 回答
0

fields_for方法将隐藏的 id 连接<input>到它捕获的块的末尾。所以,如果你把你的<% end %>标签放在你的第二个之前</td>,你应该得到你想要的结果。

于 2011-07-07T13:42:06.307 回答
0

这更像是评论(但我似乎无法直接评论)。只是想指出 Dogbert 的回答对我有用。大多数浏览器似乎并不担心格式错误的 html……直到我尝试在 IE8 中的表上使用 jquery ui 可排序,这导致了许多问题(包括崩溃)。无论如何,在 td 内的隐藏字段中明确包含 id 似乎是要走的路。您可能只想在对象被持久化时才考虑这样做(否则隐藏字段没有值,这可能是也可能不是问题,具体取决于您的代码)。添加检查以查看对象是否持久化可能如下所示(在上述情况下):

<% if gl.object.persisted? %>
  <td><%= gl.hidden_field :id %></td>
<% end %>
于 2013-02-24T00:24:19.493 回答