2015-05-02 88 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