0

互いに has_and_belong_to_many の 2 つのモデルがあります。

class Post < ActiveRecord::Base
  has_and_belongs_to_many :tags, :join_table => :tags_posts
end

class Tag < ActiveRecord::Base
  has_and_belongs_to_many :posts, :join_table => :tags_posts
end

そして、私はクエリを持っています:

@tags = Tag.where(name: ["tag1","tag2","tag3"])

これらのタグを持つすべてのユニークな投稿を取得したいので、次の醜いコードを書きます。

@posts = [] 
@tags.each do |tag|
  @posts += tag.posts
end
@posts.uniq!

@posts は "ActiveRecord::Relation" ではなく配列であるため、すべてのクラス メソッドを直接使用することはできません。これを達成するためのより良い方法はありますか?

4

2 に答える 2

1

一意の投稿を取得するのではなくincludes、モデルのクエリを使用して 2 つのテーブルを結合できます。PostTag

Post.includes(:tags).where(:tags => { name: %w(tag1 tag2 tag3) })
于 2013-09-10T06:18:19.470 に答える