1

我正在开发一个遗留项目,该项目使用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

4

4 回答 4

0

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

category = params[:course][:categories]
params[:course][:categories] = [category]
于 2012-04-28T20:54:52.877 回答
0

如果您只允许选择一个标签,您可以这样做:

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

每个item数组都有first作为显示值,last作为返回值,在这种情况下,它们都将返回相同的东西,因为当数组作为一个元素时,数组的第一个元素与最后一个元素相同.

于 2012-04-28T20:56:10.253 回答
0

似乎 select 没有给你那个选项。

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

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

这应该以您需要的方式获得您的参数。

于 2012-05-02T19:44:03.857 回答
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 会处理选择标签的名称并吐出类似

service[service_add_ons_attributes][11][days]

但是我需要

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

所以我覆盖它。

希望有帮助。

于 2017-04-17T18:50:22.573 回答