2011-09-08 182 views
0

我很難將我的頭包裹在我想要做的collection_select中。一些背景:我有一個嵌套模型,我有一個佈局,每個佈局可以有一組圖像。作爲輸入的一部分,用戶可以決定以什麼順序進行圖像傳輸。這取決於圖像的layout_placement值。目前這工作時​​,layout_placement是一個純文本字段,用戶可以輸入等collection_select的值和名稱

<%= f.fields_for :images do |builder| %> 
    <%= builder.file_field :image %> 
    <%= builder.label :layout_placement %> <%= builder.text_field :layout_placement, :size => 3%> 
    <br /><br /> 
<% end %> 

我需要的雖然是到位的純文本字段的下拉,讓我限制值選擇layout_placement - 這是基於可用空間的數量(每個佈局不同,並且具有2到5個圖像插槽)。

我已經在名爲image_slots的佈局中有一個字段,它給出了正在使用的佈局的可用圖像插槽的數量。所以我想讓我的可用選項範圍從1到圖像插槽的數量。我試圖做這樣的事情:

<%= builder.collection_select :layout_placement, [email protected]_slots, ???, ??? %> 

我卡住什麼,以通爲:id:name方法。我嘗試過更簡單,只是使用select_tag,但我陷入了一個不同的領域,因爲它是一個嵌套模型,:object#method設置出錯。

任何幫助,使任何選項的工作將不勝感激。

回答

0

在你的情況下,你並不需要使用collection_select,因爲你希望你的選項的文本和值是相同的東西(即:1 .. @ layout.image_slots)。試試這個

<%= builder.select :layout_placement, [email protected]_slots %> 

在您image_slots可能返回nil的情況下,只要確保你處理得當

<%= builder.select :layout_placement, 1..(@layout.image_slots || 1) %> 

爲了驗證位置值的uniq,將它添加到您的圖像模型

validates_uniqueness_of :layout_placement, :scope => :layout_id 
+0

感謝您提供image_slots爲零的可能性。是否有驗證可以確保所選的圖像插槽是唯一的?如果在2選擇中選擇'1',那麼它閃爍驗證? – Tonys

+0

編輯我的答案以包含驗證部分。 – pmaudet

+0

太棒了!非常感謝! – Tonys