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>です。<input>IDをTD要素の1つに表示するにはどうすればよいですか?

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 %>タグを 2 番目の の前に置く</td>と、必要な結果が得られるはずです。

于 2011-07-07T13:42:06.307 に答える
0

これはコメントのようなものです (ただし、直接コメントすることはできないようです)。Dogbertの答えがうまくいったことに注意したいだけです。不正な形式の html は、ほとんどのブラウザーを心配していないようでした... IE8 のテーブルで jquery ui sortable を使用しようとするまでは、多くの問題 (クラッシュを含む) が発生しました。とにかく、td 内の非表示フィールドに id を明示的に含めるのがよいようです。オブジェクトが永続化されている場合にのみ、これを行うことを検討することをお勧めします (それ以外の場合は、非表示フィールドに値がなく、コードによっては問題になる場合とそうでない場合があります)。オブジェクトが永続化されているかどうかを確認するチェックを追加すると、次のようになります (上記の場合)。

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