ActsAsTaggableOn добавить тег к объекту

Я работаю над устаревшим проектом, который использует ActsAsTaggableOn, но похоже (на основе документации), что он не использует его нормально?

мой объект Reports имеет несколько объектов ActsAsTaggableOn, например year_tags.

Я пытаюсь добавить тег на основе: https://rubydoc.info/gems/acts-as-taggable-on/#usage Я должен просто использовать:

report.year_tags.add("foo")

Тем не менее, это говорит:

NoMethodError: undefined method `add' for #<ActsAsTaggableOn::Tag::ActiveRecord_Associations_CollectionProxy:0x00007fbedb9134e8>

Я могу перечислить year_tags и получить длину, и когда я их вывожу, я получаю строки, как и ожидалось (печатается по одной в строке, но, может быть, это нормально для Ruby?)

I year_tags ДЕЙСТВИТЕЛЬНО имеет метод push, но ему нужен объект ActsAsTaggableOn, а не строка... что кажется странным.

Расчетное время прибытия:

немного подробнее, потратив больше времени на это:

Похоже, что типичный способ использования ActsAsTaggableOn состоит в том, чтобы иметь один список тегов, однако у нас есть несколько различных типов тегов, поэтому у нас есть report.year_tags, report.level_tags и т. д. Каждый из них выглядит, может быть, итератором? в списке ActsAsTaggableOn::Tag объектов? или что-то подобное?


person Brian Postow    schedule 28.04.2020    source источник


Ответы (1)


вы можете использовать act_as_taggable_on, например. acts_as_taggable_on :year_tags тогда вы сможете сделать year_tags_list.add "tag" см. исходный код в качестве ссылки

person Dmalyshev    schedule 30.04.2020
comment
Это, вероятно, то, что вы говорили, но: report.year_tag_list.add(bar) работает. Спасибо! (также нужен report.save в конце. Это, наверное, очевидно для всех, кроме меня...) - person Brian Postow; 01.05.2020