collection_select值和名称

时间:2011-09-08 16:11:40

标签: ruby-on-rails forms

我很难将脑袋缠绕在我正在尝试的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设置出错。

非常感谢任何选项的任何帮助。

1 个答案:

答案 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