ActsAsTaggableOn:获取 has_many 关系中子对象的所有标签

ActsAsTaggableOn: Get all tags for child objects in a has_many relation

我的 rails 应用有机构级帐户,用户很多。

每个机构都有很多项目。

一个项目acts_as_taggable和机构中的用户可以将标签添加到他们机构的项目中。

我想查询属于特定机构的项目的所有标签列表。

例如 Project.where(institution_id: 1).tags(不存在)

是否需要将项目的机构设置为tags的owner来方便,然后按owner查询?

class Institution < ActiveRecord::Base
  acts_as_tagger
end

class Project < ActiveRecord::Base
  acts_as_taggable
end

然后设置标签时:

@current_user.institution.tag(@some_project, with: 'tag1, tag2')

...并获取标签:

@current_user.institution.owned_tags

或者,有没有不需要设置所有权的方法?

当然,做类似的事情:

ActsAsTaggableOn::Tag.
  joins(:taggings).
  where(taggings: {taggable: current_institution.projects})

该语法可能需要进行一些调整(尽管它适用于我的数据)。

我假设你有办法获得属于某个机构的项目 - 我已经用 current_institution.projects 挥手了。酌情替换为您自己的代码。

无论如何,我相信这应该会引导您朝着正确的方向前进。