【问题标题】:Rails - get all possible values in a has_many through associationRails - 通过关联获取 has_many 中的所有可能值
【发布时间】:2015-05-02 12:17:12
【问题描述】:

我有一个非常简单的数据模型,如下:

class Object < ActiveRecord::Base
has_many :object_tags
has_many :tags, through: :object_tags
end

class Tag < ActiveRecord::Base
has_many :object_tags
has_many :objects, through: :object_tags
end

class ObjectTag < ActiveRecord::Base
belongs_to :object
belongs_to :tag 
end

Object 和 Tag 都有一个 name 属性。

我想要做的是,对于一组已定义的对象@objects,获取我的一组对象可以采用的所有可能标签名称的数组。我希望能够做这样的事情(这是错误的,但仅用于说明目的):@objects.pluck(:tags.name).uniq

我已经尝试了很多东西,包括包含和连接,但没有什么能让我得到我的结果。我得到的最接近的是@objects.includes(:tags).pluck(:tags),但它只获取我的标签数组,然后我无法检索名称。 这可能是一个非常简单的问题,但我是 Rails 的初学者,在我的研究中找不到任何东西。

感谢您的帮助!

【问题讨论】:

  • Object it's a bad name for your model. Object 是所有 Ruby 对象的默认根。
  • 试试@objects.collect(&amp;:tags)
  • 我得到了它与 @object.includes(:tags).uniq.map{ |tag| tag.name } 的合作。这听起来像是一个合理的解决方案吗?
  • @Alexandre, @object@objects ?
  • 它返回什么@objects.collect(&amp;:tags).flatten

标签: ruby-on-rails activerecord rails-activerecord


【解决方案1】:

你可以这样做:

@object.tags.uniq.pluck(:name)

【讨论】:

  • 不幸的是,当我这样做时,我得到“# 的未定义方法‘标签’”
  • @Alexandre: @objects到底是什么(看来你应该在Object模型中有关联tags,所以我指的是它)?
  • 它是在我的控制器中定义的一组对象,这取决于登录的用户。如果这让事情变得不太清楚,我们可以直接使用 Object
  • 假设@objects = Object.all(有时是真的)
猜你喜欢
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
相关资源
最近更新 更多