在我的应用程序中,通过名为allocations的模型,setlists有很多歌曲,反之亦然。在我的表单中,我希望用户能够通过创建新分配来从现有库中选择要添加到设置列表的歌曲。我遇到的问题是我想使用一个多选框,但无论我选择哪首歌,歌曲ID都会在保存时设置为1。我目前的表格如下:
<div>
<%=nested_form_for @allocation do|builder|%>
<%=builder.label :song_id, "Pick a song" %>
<%= builder.hidden_field :setlist_id, value: @setlist.id %>
<%= builder.select(:song_id, options_for_select(@selections),
{}, {multiple: true, size: 7}) %>
<%= link_to "Cancel", setlist_path(@setlist), class: "btn btn-large btn-danger" %>
<%=builder.submit "Add Song", class: "btn btn-large btn-primary", id: "addSongToSet" %>
<% end %>
</div>
如果我将“:html”添加到多选框,即:
,此表单可正常工作 <%= builder.select(:song_id, options_for_select(@selections),
{}, html: {multiple: true, size: 7}) %>
然后将表单更改回单个下拉框。
当我尝试使用多选框时,呈现的html是:
<select id="allocation_song_id" multiple="multiple" name="allocation[song_id][]" size="8">
<option value="1">...</option>
<option value="2">...</option>
我知道问题是名称=“allocation [song_id] []”的行,其中似乎是传递一个空值的哈希。我只是不知道如何在使用多选框时解决这个问题。
通过以下方式在控制器中找到@selections:
@selections = Song.all.collect {|s| [ [s.title, s.artist].join(" by "), s.id] }
提前感谢您的帮助。
答案 0 :(得分:0)
我使用多个select标签来选择多个产品。
我正在获取一系列产品并显示为,
= select_tag "products", options_from_collection_for_select(@products, :id, :product_name), :multiple => true
因此,在params [:products]中,您将获得所选产品的ID。 它为我工作。