現在、Ruby on Rails アプリケーションを開発していますが、まだ解決できない問題に遭遇しました。Ryan Bates が構築したようなタグ システムをゼロから構築します (こちらを参照してください: http://railscasts.com/episodes/382-tagging?view=asciicast ) 。
だから私はこれに夢中になります:
次のモデルがあるとしましょう。
class Post < ActiveRecord::Base
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :post
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :things, through: :taggings
end
これで、すべての投稿を表示するインデックス ページができました。また、ページに表示されているすべての投稿に関連付けられているすべてのタグを表示したいと考えています。
これまでに達成したことは、投稿の読み込み中にすべてのタグを含めることができるということです:
# posts_controller/index.rb
def index
@posts = current_user.posts.includes(:tags)
end
しかし、タグをループすると、重複が発生します。
- @posts.each do |post|
= raw post.tags.map(&:name).map { |t| link_to t, tag_path(t) }.join(', ')
誰かがこれに対する解決策を持っていますか? 投稿のコレクションに関連付けられているすべてのタグを読み込むにはどうすればよいですか。
ここでは、SQL での問題の解決策について説明しました。おそらく誰かが助けてくれるでしょう。
SELECT DISTINCT name FROM tags INNER JOIN taggings ON taggings.tag_id = tags.id
WHERE taggings.post_id IN (1, 2, 3, ...) // The Post IDS
前もって感謝します!
フィリップ