2013-02-15 37 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