新表格的相关部分如下所示:
<%= 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,反之亦然?
答案 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
关联。如果未选择任何艺术家,则数组中的该空白元素将确保从关联中删除所有艺术家。