Rails acts_as_taggable与表单

时间:2011-10-09 03:03:19

标签: ruby-on-rails-3 acts-as-taggable-on

我刚刚开始使用acts_as_taggable gem。真的很喜欢它到目前为止,但我有点不清楚如何使用这种形式的宝石。

class Photo < ActiveRecord::Base
  acts_as_taggable_on :tags
end

在我的照片表单中,我正在尝试为用户实施一系列复选框,以便为照片分配标签:

<%= f.label :tag_list %>
<%= f.check_box :tag_list, "landscape" %>
<%= f.check_box :tag_list, "people" %>

查看表单时出现此错误:

NoMethodError in Photos#edit
...line #19 raised:

undefined method `merge' for "landscape":String
Extracted source (around line #19):

18:     <div class="float_tag">
19:       <%= f.check_box :tag_list, "landscape" %>

关于如何创建表单的任何想法?

2 个答案:

答案 0 :(得分:3)

我假设您的<form>看起来像这样:

<%= form_for(@photo) do |f| %>
  <%= f.label :tag_list %>
  <%= f.check_box :tag_list, "landscape" %>
  <%= f.check_box :tag_list, "people" %>
<% end %>

您应该稍微改变f.checkbox行:

<%= form_for(@photo) do |f| %>
  <%= f.label :tag_list %>
  <%= f.check_box :tag_list, { :multiple => true }, 'landscape', nil %>
  <%= f.check_box :tag_list, { :multiple => true }, 'people', nil %>
<% end %>

在提交时会发布类似的内容(例如,仅选择人员):

{ :post => { :tag_list => ['', 'people'] } }

答案 1 :(得分:2)

对于任何试图使用Rails 4和强参数的人,我还必须允许tag_list参数作为数组。

params.require(:clip).permit(
  :name, :other_params, { tag_list: [] }
)