【问题标题】:ActsAsTaggableOn: Get all tags for child objects in a has_many relationActsAsTaggableOn:获取 has_many 关系中子对象的所有标签
【发布时间】:2017-12-13 00:32:02
【问题描述】:

我的 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

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

【问题讨论】:

  • 你最终解决了吗?

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


【解决方案1】:

当然,请执行以下操作:

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

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

我假设您有办法获得属于某个机构的项目 - 我已经向current_institution.projects 表示过。酌情替换为您自己的代码。

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

【讨论】:

  • 谢谢!那个模板让我直接找到了答案。对于 ActsAsTaggableOn,它的工作方式如下:ActsAsTaggableOn::Tag.joins(:taggings).where(taggings: { taggable_id: current_institution.projects }) 我有其他模型 act_as_taggable 所以我将查询限制为仅具有 taggable_type 的项目,如下所示: ActsAsTaggableOn::Tag.joins(:taggings).where(taggings: { taggable_id: current_institution.projects, taggable_type: :Project })
  • 抱歉,我打错了 ActsAsTaggable 而不是 ActsAsTaggableOn。出于好奇,您是否按照我说的方式尝试过?我会认为(但我可能弄错了)执行taggable: current_institution.projects(不是taggable_id)会将其范围专门用于项目,从而为您节省taggable_type: 声明。
  • 是的,我用taggable: ... 尝试过,但它不够聪明。它抱怨该列不存在。
  • 有趣。我得去看看源代码。无论如何,如果您愿意,请随时点赞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多