2011-07-06 27 views
2

當我使用一個結構,如:fields_for表生產技術上不正確的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>引起該協會的身份證號碼位於</tr>之後。我怎樣才能讓ID的<input>出現在其中一個TD元素內?

回答

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

我懷疑這會工作,但現在的問題有(神祕)消失。如果再出現,我會嘗試你的方法。 –

0

fields_for方法串接的隱藏標識<input>到它捕​​獲塊的末尾。所以,如果你把<% end %>標籤放在第二個</td>之前,你應該得到你想要的結果。

+0

這會產生一個問題,因爲我需要每個關聯記錄的。 –

0

這是更多的評論(但我似乎無法直接評論)。只是想說明Dogbert的答案對我有效。格式錯誤的html似乎並不擔心大多數瀏覽器......直到我試圖在IE8的桌面上使用jQuery UI排序,這導致了一些問題(包括崩潰)。無論如何,明確地將id包含在td中的隱藏字段中似乎是一種方法。如果對象持久存在,您可能只想考慮這樣做(否則隱藏字段沒有值,根據您的代碼,這可能是也可能不是問題)。添加一個檢查,看是否被持久化對象可能看起來像(在上述情況下):

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