2013-02-15 40 views
0

我不知道應該調用哪個功能....所以我只能描述基本場景: 主題has_many標記通過:標記 標記has_many主題通過:標記在Rails中顯示屬於一個主題標籤的主題

所以,在@topic顯示頁面,我想顯示其有屬於@topic標籤(沒有使用相同的標記,只有一個共同的標籤)

一個可能的方法的所有主題是

tags.each do |tag| 
    tag.topics.each do |topic| 
    topic 
    end 
end 

bu這可能會導致在主題中的複述,因爲一個主題可能屬於不同的標籤

我發現可以使用ids.uniq來刪除數組中的dulicates。那麼這是一個解決方案嗎?我怎樣才能得到topic_ids?也許topic_ids= topic_ids + topic.id

+0

你已經有了'topic_ids',使用'@ tag.topic_ids'獲得主題的ID屬於標籤。 – Thanh 2013-02-15 16:08:24

回答

2

這將爲您提供tag_id與@topic相關聯的所有主題。請注意,這也將包括原@topic

topics = Topic.joins(:taggings). 
       where(:taggings => {:tag_id => @topic.taggings.pluck(:tag_id) }). 
       uniq 

如果要排除原來的,只是增加一個額外的where到鏈:

where("taggings.topic_id != ?", @topic.id) 

有一個稍微更有效的方式做到這使用子查詢而不是初始數據庫調用來獲得關聯的tag_id,但這可能就足夠了。

+0

這真的很酷..... – cqcn1991 2013-02-16 09:56:39

0

我喜歡acts_as_taggable_on然後我用

<%= raw @topic.find_related_tags.map { |t| link_to(t.title, topic_path(t)}.join(" ") %> 
+0

這是如何從原始主題檢索相關主題列表? – PinnyM 2013-02-15 18:21:58