数组作为参数从Rails选择助手

时间:2012-04-28 20:16:40

标签: ruby-on-rails ruby

我正在处理一个使用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

4 个答案:

答案 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][]

所以我覆盖它。

希望有所帮助。