0

現在、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

前もって感謝します!

フィリップ

4

2 に答える 2

1

あなたのSQLに相当するRailsコードは、

Tagging.find_all_by_post_id(@posts.map{|p| p.id})

どこで

Tagging.where(:post_id => @posts.map(&:id))
于 2013-08-27T18:37:23.297 に答える