Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Manipulating tags with acts_as_taggable_on and ActiveAdmin

I have a Post model which I'm accessing through ActiveAdmin. It's also taggable using the acts_as_taggable_on gem. So the admin can add, edit or delete tags from a specific Post.

The normal way to add the tagging functionality for the resource in your admin panel is by doing this in admin/posts.rb:

ActiveAdmin.register Post do
  form do |f|
    f.inputs "Details", :multipart => true do
      f.input :tag_list
      # and the other irrelevant fields goes here
    end

    f.buttons
  end
end

However, I want to have the tags selected from a multiple select form field and not being entered manually in a text field (like it is with the code above). So I've tried doing this:

      f.input :tag_list, :as => :select,
                         :multiple => :true,
                         :collection => ActsAsTaggableOn::Tag.all

but it doesn't work as expected. This actually creates new tags with some integer values for names and assigns them to that Post. Someone told me that extra code is needed for this to work.

Any clues on how this is done? Here's my model just in case: http://pastie.org/3911123

Thanks in advance.

like image 527
Agis Avatar asked May 14 '12 18:05

Agis


1 Answers

Instead of

:collection => ActsAsTaggableOn::Tag.all

try

:collection => ActsAsTaggableOn::Tag.pluck(:name)

Setting the collection to Tag.all is going to tag your posts with the tag's ID, since that's how tags are identified by default (that's where the integer values for names are coming from). map(&:name) tells the form builder to use the tag's name instead.

like image 199
Steve Grossi Avatar answered Sep 25 '22 23:09

Steve Grossi