0

この機能を何と呼ぶべきかわかりません....基本的なシナリオを説明するだけです:

そこで、@topic 表示ページで、@topic に属するタグを持つすべてのトピックを表示したい (同じタグではなく、共通のタグが 1 つだけある)

1つの可能なアプローチは

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

ただし、トピックは異なるタグに属している可能性があるため、トピックが重複する可能性があります

ids.uniq配列内の重複を削除するために使用できることがわかりました。それで、これは解決策になるでしょうか?そして、どうすれば入手できtopic_idsますか?たぶんtopic_ids= topic_ids + topic.id

4

2 に答える 2

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おそらくこれで十分です。

于 2013-02-15T16:11:18.310 に答える
0

私はacts_as_taggable_onを好み、次に使用します

<%= raw @topic.find_related_tags.map { |t| link_to(t.title, topic_path(t)}.join(" ") %>
于 2013-02-15T16:28:44.800 に答える