我很难将脑袋缠绕在我正在尝试的collection_select上。一些背景:我有一个嵌套模型,我有一个布局,每个布局可以有一定数量的图像。作为输入的一部分,允许用户决定什么图像以什么顺序进行。这取决于图像的layout_placement
值。这当前有效,layout_placement是一个纯文本字段,用户可以输入等。
<%= 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, 1..@layout.image_slots, ???, ??? %>
我对:id
和:name
方法传递的内容感到困惑。我试过更简单,只是使用select_tag
,但我被困在另一个区域,因为它是嵌套模型,:object#method
设置出错。
非常感谢任何选项的任何帮助。
答案 0 :(得分:0)
在你的情况下,你真的不需要使用collection_select,因为你希望你的选项的文本和值是相同的东西(即:1 .. @ layout.image_slots)。试试这个
<%= builder.select :layout_placement, 1..@layout.image_slots %>
如果您的image_slots可能会返回nil
,请确保正确处理
<%= builder.select :layout_placement, 1..(@layout.image_slots || 1) %>
要验证展示位置值是否为uniq,请将其添加到您的图片模型
validates_uniqueness_of :layout_placement, :scope => :layout_id