ruby on rails - fields_for in table生成技术上不正确的HTML



当我使用这样的结构时:

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

我认为隐藏字段不会被打印,如果你手动打印它。你能试试这个吗?

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

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

这更像是一个评论(但我似乎无法直接评论)。我只是想说道伯特的答案对我有用。大多数浏览器似乎并不担心格式错误的html……直到我尝试在IE8中对表格使用jquery ui sortable,这导致了许多问题(包括崩溃)。无论如何,在td的隐藏字段中显式地包含id似乎是可行的方法。如果对象是持久化的,您可能希望只考虑这样做(否则隐藏字段没有值,这可能是一个问题,也可能不是,这取决于您的代码)。添加一个检查来查看对象是否被持久化可能看起来像(在上面的例子中):

<% if gl.object.persisted? %>
  <td><%= gl.hidden_field :id %></td>
<% end %>

相关内容

  • 没有找到相关文章

最新更新