续集:排除没有关联的记录

时间:2015-02-25 18:21:56

标签: ruby sinatra sequel

我有一个使用续集ORM的Sinatra应用程序,我试图仅列出包含一个或多个帖子的类别。

所以,如果我在数据库中有两个类别; “苹果”和“橙子”,以及一个分配给“苹果”的帖子,然后当我列出当前类别时,我只想要提供“苹果”类别。

经过多次拉扯之后,我终于成功地使用了以下内容;

class Post < Sequel::Model
  many_to_one :category
end

class Category < Sequel::Model
  one_to_many :posts

   dataset_module do 
     def with_posts
       where(id: Post.select(:category_id))
     end
   end
end

@categories = Category.with_posts

如果在续集中有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

尝试Jeremy的反缓存https://github.com/jeremyevans/sequel_postgresql_triggers

# In your migration:
pgt_counter_cache :categories, :id, :posts_count, :posts, :category_id

# And in your code:
categories = Category.exclude(posts_count: 0).all

文档不是很好,所以这里的论点是:https://github.com/jeremyevans/sequel_postgresql_triggers/blob/master/lib/sequel_postgresql_triggers.rb#L27