我正在处理一个使用acts_as_taggable_on
的遗留项目,该项目希望标记出现在数组中。我有一个选择框,允许用户在名为类别的字段中选择课程上的标签。大规模分配创建的唯一方法是,如果params看起来像params = {:course => {:categories => ['Presentation']}}
。我现在有了这个助手的观点:
<%= f.select 'categories', ['Presentation' , 'Round Table' , 'Demo', 'Hands-on'] %>
这会给我一个像params = {:course => {:categories => 'Presentation'}}
这样的参数。这不起作用,因为Acts as tag gable显然无法处理传递除集合之外的任何东西。
我已尝试将categories
更改为categories[]
,但之后我收到此错误:
undefined method `categories[]' for #<Course:0x007f9d95c5b810>
是否有人知道 正确的 格式化select标签以将数组返回控制器?我正在使用Rails 3.2.3
答案 0 :(得分:0)
我没有使用acts_as_taggable_on,但也许这个简单的黑客适合你?你应该把它放在质量分配之前。
category = params[:course][:categories]
params[:course][:categories] = [category]
答案 1 :(得分:0)
如果您只允许选择一个标签,您可以这样做:
<%= f.select 'categories', [['Presentation'] , ['Round Table'] , ['Demo'], ['Hands-on']] %>
每个项目数组将首先显示显示值,最后返回返回值,在这种情况下将返回相同的内容,因为数组的第一个元素与数组中的最后一个元素相同作为一个元素。
答案 2 :(得分:0)
似乎select不会给你那个选项。
如果我理解正确,一个选项可能是使用select_tag而只是明确你想要在params中选择的位置:
<%= select_tag 'course[categories][]', options_for_select(['Presentation' , 'Round Table' , 'Demo', 'Hands-on']) %>
那应该按照你需要的方式获得你的参数。
答案 3 :(得分:0)
以下是我在其中一个项目中使用的内容:
<% 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][]
所以我覆盖它。
希望有所帮助。