1

タグを持つことができる投稿があり、タグにはカテゴリがあります。ここで、「公開済み」のスコープを作成する必要があります。利用可能なすべてのカテゴリにタグがある場合にのみ、投稿を公開できます。つまり、言い換えれば。データベースに 4 つの tagcategory レコードが含まれている場合、公開されたと見なされる投稿には、これら 4 つのカテゴリすべてにタグが含まれている必要があります。

投稿には多くのタグがあります (tag_categories を介して)。そして、タグは tag_category に属します。タグカテゴリには多くのタグがあります

投稿インスタンスでは、そのようなメソッドを簡単に作成できました。

def has_tags_in_all_categories?
  #select all category id's
  category_ids = TagCategory.pluck(:id)
  #select all post tag id's
  tag_ids = self.tags.pluck(:tag_category_id)
  #create a new array with the category ids from the post.tags subtracted from all category ids
  remaining = category_ids.reject{|x| tag_ids.include? x}
  #if id's are left in the array -> Not all categories are filled in.
  remaining.empty?
end

しかし、公開されたすべての投稿を 1 つのページに表示するには、スコープを作成する必要があります。すべての投稿をループしてこのメ​​ソッドを適用すると、明らかに多くの不必要なデータベース クエリが発生します。

誰かがクエリで私を助けてくれますか?

class Post < ActiveRecord::Base
    def self.published
      find(:all) #No clue here
    end
end

データベース(申し訳ありませんが、これを派手にする方法がわかりません):

posts
    id
    title

posts_tags
    post_id
    tag_id

tags
    id
    tag_category_id
    name

tag_categories
    id
    name
4

0 に答える 0