数组作为参数从轨道选择帮助程序



我正在处理一个使用acts_as_taggable_on的遗留项目,该项目希望标签以数组形式出现。我有一个选择框,允许用户在名为类别的字段中选择课程上的标签。创建批量分配的唯一方法是参数看起来像这样params = {:course => {:categories => ['Presentation']}}。我目前有一个视图与这个帮助器:

 <%= f.select 'categories', ['Presentation' , 'Round Table' , 'Demo', 'Hands-on'] %>

这将给我一个像params = {:course => {:categories => 'Presentation'}}这样的参数。这是行不通的,因为充当标记山墙显然无法处理传递集合以外的任何内容。

我尝试将categories更改为categories[],但随后出现此错误:

undefined method `categories[]' for #<Course:0x007f9d95c5b810>

有谁知道格式化我的选择标签以将数组返回到控制器的正确方法?我正在使用 Rails 3.2.3

我没有使用acts_as_taggable_on,但也许这个简单的技巧适合你?你应该把它放在批量分配之前。

category = params[:course][:categories]
params[:course][:categories] = [category]

如果您只允许选择一个标签,您可以执行以下操作:

<%= f.select 'categories', [['Presentation'] , ['Round Table'] , ['Demo'], ['Hands-on']] %>

每个项目数组将首先具有显示值,最后一个返回值,在这种情况下,它们都将返回相同的内容,因为当数组作为一个元素时,数组的第一个元素与最后一个元素相同。

似乎选择没有给你这个选项。

如果我理解正确,一种选择可能是改用select_tag,并明确说明您希望在参数中选择的位置:

<%= select_tag 'course[categories][]', options_for_select(['Presentation' , 'Round Table' , 'Demo', 'Hands-on']) %>

这应该让你的参数按照你需要的方式。

这是我用于我的一个项目的内容:

<% options = { include_blank: true } %>
<% html_options = { required: true, name: "#{f.object_name}[#{resource.id}][days][]" } %>
<%= f.select :days, DAYS, options, html_options %>

没有html_options[:name],Rails 处理 select 标签的名称并吐出类似

service[service_add_ons_attributes][11][days]

但我需要

service[service_add_ons_attributes][11][days][]

所以我覆盖了它。

希望有帮助。

最新更新