Манипулирование тегами с act_as_taggable_on и ActiveAdmin

У меня есть модель Post, к которой я обращаюсь через ActiveAdmin. Он также может быть помечен с помощью act_as_taggable_on gem. Таким образом, администратор может добавлять, редактировать или удалять теги из определенной Почты.

Обычный способ добавить функцию тегов для ресурса в панели администратора - это сделать это в 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

Тем не менее, я хочу, чтобы теги были выбраны из поля с несколькими полями выбора и не вводились вручную в текстовое поле (например, с кодом выше). Поэтому я попытался сделать это:

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

но он не работает должным образом. Это фактически создает новые теги с целыми значениями для имен и назначает их этой Почте. Кто-то сказал мне, что для этого требуется дополнительный код.

Любые подсказки о том, как это делается? Здесь моя модель на всякий случай: http://pastie.org/3911123

Спасибо заранее.

Ответ 1

Вместо

:collection => ActsAsTaggableOn::Tag.all

попробовать

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

Настройка коллекции на Tag.all будет помечать ваши сообщения с идентификатором тега, поскольку это то, как теги идентифицируются по умолчанию (что там, где целые значения для имен поступают). map(&:name) указывает конструктору формы вместо имени тега.