2013-05-06 108 views
3

我有3個模型 - 標準,和layers_assocs。標準通過layer_assocs有很多層,其餘都很簡單。該layers_assocs表存儲standards_idlayer_idvisible布爾而表僅僅是一個name(和自動遞增id)查找表。Fields_for具有嵌套屬性,通過的has_many關聯

在標準選項頁面上,我有一個複選框,用於更新:visible嵌套屬性。我正在尋找一種方法來在窗體標籤中顯示關聯的圖層名稱。目前,我有這樣的複選框:

<%= f.fields_for :layers_assocs do |assoc| %> 
    <%= assoc.check_box :visible %> 
<% end %> 

我怎麼會與layers_assocsbelongs_to協會是一個謎顯示相關層的名稱。我可以用這個

<%= assoc.text_field :layer_id %> 

顯示layer_id但嘗試使用作爲通過層顯示名稱的整數像standard.layers[assoc.layer_id]standard.layers[:layer_id]不會飛。 assoc是一個FormBuilder對象,所以我不知道該怎麼做。檢查assoc吐出一個巨大的對象與標準中的一切。

我檢查了rails api on fields_forthis question沒有運氣。 :name:visible未定義。

回答

6

明白了。一定是咖啡。

<% @standard.layers_assocs.each do |assoc| %> 
    <%= f.fields_for :layers_assocs, assoc do |layer_field| %> 
    <%= layer_field.label assoc.layer.name %> 
    <%= layer_field.check_box :visible %> 
    <% end %> 
<% end %> 

對於複選框的工作,它需要可見屬性作爲關鍵。 f.check_box layer_assoc.visible只會認爲你試圖強制饋送它'真'或'虛假'。然後獲取名稱的問題是,當:visible處於正確範圍內時,在fields_for塊內不可訪問layer_assoc.layer.name,因爲layer_field是FormBuilder對象,而不是layers_assoc對象。以上內容確保兩個範圍都可用,並且輸出不會過度。 f.fields_for :layers_assoc會輸出與標準layer_assocs數組中的對象一樣多的重複項。 f.fields_for :layers_assoc, assoc將其限制到正確的數量。

請注意,表單標籤與輸出HTML中的for="..."未正確「附加」到相關的複選框。我可以處理它,但讓我知道你是否知道更好的方法。

相關問題