2015-05-02 68 views
0

得到一个的has_many所有可能的值我有一个非常简单的数据模型,如下所示:Rails的 - 通过关联

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 

两个对象和标签有一个name属性。

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

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

感谢您的帮助!

+0

['Object'它是模型的名声。(http://ruby-doc.org/core-2.2.2/Object。 html)Object是所有Ruby对象的默认根。 –

+0

尝试'@ objects.collect(&:tags)' –

+0

我用'@ object.includes(:tags).uniq.map {| tag | tag.name}'。这听起来像一个合理的解决方案? – Alexandre

回答

0

你可以做到这一点通过以下方式:

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

不幸的是,当我这样做时,我得到了“未定义的方法'标签'#” – Alexandre

+0

@Alexandre:准确地说@ @ objects是什么(似乎你应该在'Object'中有'模型,所以我指的是它)? – potashin

+0

它是一组在我的控制器中定义的对象,取决于登录的用户。如果这样做不那么清楚,我们可以直接使用对象 – Alexandre