Sequel:排除没有关联的记录
Sequel: exclude records that do not have associations
我有一个使用 Sequel ORM 的 Sinatra 应用,我试图在其中仅列出具有一个或多个 Post 的类别。
所以,如果我在数据库中有两个类别; "Apples" 和 "Oranges",一个 Post 分配给 "Apples",然后当我列出当前类别时,我只想提供 "Apples" 类别。
经过多次纠结后,我终于设法让它与以下内容一起工作;
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
如果 Sequel 中有更好的方法,请告诉我。
试试 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
我有一个使用 Sequel ORM 的 Sinatra 应用,我试图在其中仅列出具有一个或多个 Post 的类别。
所以,如果我在数据库中有两个类别; "Apples" 和 "Oranges",一个 Post 分配给 "Apples",然后当我列出当前类别时,我只想提供 "Apples" 类别。
经过多次纠结后,我终于设法让它与以下内容一起工作;
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
如果 Sequel 中有更好的方法,请告诉我。
试试 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