ActsAsTaggableOn 添加标签到对象

ActsAsTaggableOn add tag to object

我正在处理一个使用 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 来说是正常的?)

我 year_tags 确实有一个 push 方法但是它需要一个 ActsAsTaggableOn 对象,而不是一个字符串...这看起来很奇怪。

预计到达时间:

更详细一点,花了更多时间看这个:

似乎使用 ActsAsTaggableOn 的典型方式是使用单个 tag_list,但是,我们有几种不同类型的标签,因此我们有 report.year_tags,并且 report.level_tags, 等等...每个似乎都是一个迭代器?在 ActsAsTaggableOn::Tag 个对象的列表中?或类似的东西?

你可以使用 acts_as_taggable_on 例如acts_as_taggable_on :year_tags 那么你就可以做到 year_tags_list.add "tag" see source code as reference