1

我有一个可以有标签的帖子,一个标签有一个类别。现在我需要创建一个“已发布”的范围。只有在每个可用类别中都有标签时,才能发布帖子。换句话说。如果数据库包含 4 个 tagcategory 记录,则帖子应该在所有这 4 个类别中都有标签,才能被视为已发布。

一个帖子有很多标签(通过 tag_categories)。并且标签属于一个tag_category。一个标签类别有很多标签

在 post 实例上,我可以轻松创建这样的方法:

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

但是要在单个页面上显示所有已发布的帖子,我需要创建一个范围。遍历所有帖子并应用此方法,显然会导致大量不必要的数据库查询。

谁能帮我查询一下?

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