タグを持つことができる投稿があり、タグにはカテゴリがあります。ここで、「公開済み」のスコープを作成する必要があります。利用可能なすべてのカテゴリにタグがある場合にのみ、投稿を公開できます。つまり、言い換えれば。データベースに 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