多个collection_select中数组中的第一项始终为空

时间:2016-07-21 20:48:50

标签: ruby-on-rails form-for

新表格的相关部分如下所示:

  <%= f.fields_for :event_artists do |fea| %>
    <%= fea.collection_select :artist_id, Artist.all, "id", "name", {include_blank: true}, {multiple: true} %>
  <% end %>

在日志上,你可以看到数组的第一项始终是空白的,即使我没有选择空白字段

"event_artists_attributes"=>{"0"=>{"artist_id"=>["", "2", "5"]}}}

有没有办法解决这个问题?或许,如果选择空白字段,那么在这种情况下不能选择实际的event_artists,反之亦然?

2 个答案:

答案 0 :(得分:0)

我认为问题与参数的顺序有关。我查看了collection_select并在我正在处理的应用中尝试了以下代码。

<%= collection_select(:category, :category_id, Category.all, :id, :name, {}, {multiple: true}) %>

<强>更新

<%= fea.collection_select :artist_id, Artist.all, "id", "name", {prompt: true}, {multiple: true} %>

答案 1 :(得分:0)

artist_id很重要。在另一种形式上,您可能完全省略了艺术家选择,在这种情况下,artists关联不应受到影响。

如果包含艺术家选择,并且您取消选择所有艺术家,则需要从artists关联中删除艺术家。当没有选择任何内容时,正常的HTML行为根本不会包含PUT中的artist_id参数。在这种情况下,您的控制器会认为您根本不想修改artists关联。

为了解决这个问题,collection_select包含一个带有空值的隐藏字段,让控制器知道表单打算改变artists关联。如果未选择任何艺术家,则数组中的该空白元素将确保从关联中删除所有艺术家。