我有一个Ruby on Rails 3.2.13应用程序,我有一个collection_select语句。 collection_select语句位于fields_for语句中,我从collection_select中收集选定的id并使用它们填充另一个表。我遇到的问题是collection_select语句在数组中添加了一个空id条目,用于存储所选id的集合。
以下是我的观点中的代码:
<%= f.fields_for :media_topics do |media_topic| %>
<%= media_topic.label :topic, "Topics" %><%= media_topic.collection_select(:topic_id, Topic.order("name_en"), :id, :name_en, {}, {multiple: true}) %>
<% end %>
以下是选择两个选项后数组的外观示例:
"media_topics_attributes"=>{"0"=>{"topic_id"=>["", "2", "47"], "id"=>"1895"}}
我认为数组应该只有两个id,“2”和“47”。 null值导致更新嵌套属性时出现问题,因为该错误表明该值不能为空。当显示存在相关行的行的编辑视图时,选择collection_select中的正确记录并按预期在列表中突出显示。
如何更改不添加空条目的collection_select语句?我不允许添加MediaTopic模型上的任何行,其中topic_id等于null。我已经研究了好几天了。我发现一个人有一个类似的问题但是这个问题的解决方案都没有解决问题。
任何帮助都将不胜感激。
答案 0 :(得分:0)
根据@vinodadhikary,数组中的null条目在Rails 3中按预期工作。我最近在Rails 4中重写了这个应用程序。我完全重写了逻辑,首先使用has_many来关联我的所有表。我还通过使用collection_select语句替换了fields_for逻辑。我在第一个{}中添加了include_hidden = false,并且null条目没有出现在数组中。几天前我问了一个类似的问题,经过大量的搜索,我想出了一个解决方案。详情请见以下链接。
答案 1 :(得分:0)
在更新操作之前,请在控制器中尝试params[:media_topic][:topic_ids].delete("")
。