1

我有一个 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”。空值导致更新我的嵌套属性时出现问题,因为错误提示该值不能为空。当为具有相关行的行显示编辑视图时,collection_select 中的正确记录被选中并按预期在列表中突出显示。

如何更改不添加空条目的 collection_select 语句?我不允许添加 MediaTopic 模型上的任何行,且 topic_id 等于 null。我已经研究了好几天了。我发现一个人有类似的问题,但该问题的解决方案都不能解决问题。

任何帮助,将不胜感激。

4

2 回答 2

0

在更新操作之前尝试params[:media_topic][:topic_ids].delete("")在您的控制器中。

于 2014-10-14T17:20:53.940 回答
0

根据@vinodadhikary 的说法,数组中的 null 条目在 Rails 3 中按预期工作。我最近在 Rails 4 中重写了这个应用程序。我完全重写了逻辑,首先使用 has_many 来关联我的所有表。我还仅使用 collection_select 语句替换了 fields_for 逻辑。我在第一个 {} 中添加了 include_hidden = false ,并且数组中没有出现空条目。几天前我问了一个类似的问题,经过大量搜索后,我想出了一个解决方案。详细信息在下面的链接中。

Rails 4 - 使用 collection_select 获取具有嵌套属性的中间表的 id 数组

于 2013-11-13T22:27:35.620 回答