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

时间:2017-12-13 00:32:03

标签: ruby-on-rails tags acts-as-taggable-on

我的rails应用程序拥有许多用户的机构级帐户。

每个机构都有很多项目。

项目acts_as_taggable,机构中的用户可以为其机构的项目添加标签。

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

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

之类的东西

我是否需要将项目的机构设置为标签的所有者以便于此操作,然后由所有者进行查询?

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

或者,是否有一种方法不需要设置所有权?

1 个答案:

答案 0 :(得分:1)

当然,做一些事情:

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

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

我假设您有办法让属于某个机构的项目 - 我曾用current_institution.projects向我挥手致意。替换为您自己的代码。

无论如何,我相信应该让你朝着正确的方向前进。