私のアプリケーションでは、割り当てと呼ばれるモデルを通じて、セットリストに多くの曲があり、その逆も同様です。私のフォームでは、ユーザーが既存のライブラリから曲を選択して、新しい割り当てを作成してセットリストに追加できるようにしたいと考えています。私が抱えている問題は、複数選択ボックスを使用したいのですが、どの曲を選択しても、保存時に曲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>
問題は name= "allocation[song_id][]" という行で、空の値を持つハッシュを渡しているようです。複数選択ボックスを使用しているときにこれを修正する方法がわかりません。
@selections は、コントローラーで次のように検出されます。
@selections = Song.all.collect {|s| [ [s.title, s.artist].join(" by "), s.id] }
助けてくれてありがとう。