【问题标题】:fields_for in table produces technically incorrect HTML表中的 fields_for 生成技术上不正确的 HTML
【发布时间】:2011-07-06 20:32:54
【问题描述】:

当我使用如下结构时:

<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) 中收到表中每一行的错误 (&lt;input&gt; is not allowed inside &lt;tbody&gt;. Inserting &lt;input&gt; before the &lt;table&gt; instead.) 这是由于将关联 ID 的隐藏 &lt;input&gt; 放置在 &lt;/tr&gt; 之后造成的。如何使 id 的 &lt;input&gt; 出现在 TD 元素之一中?

【问题讨论】:

    标签: ruby-on-rails forms views associations fields-for


    【解决方案1】:

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

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

    【讨论】:

    • 我怀疑这会起作用,但现在问题已经(神秘地)消失了。如果它再次出现,我会尝试你的方法。
    【解决方案2】:

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

    【讨论】:

    • 这会产生问题,因为我需要每个关联记录的 。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-25
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多