查找所有关联数为零和非零的记录。

class Gallery < ApplicationRecord
  has_many :associated_images, as: :imageable
end

class Event < ApplicationRecord
  has_many :associated_images, as: :imageable
end

class Image < ApplicationRecord
  has_many :associated_images
end

class AssociatedImage < ApplicationRecord
  belongs_to :imageable, polymorphic: true
  belongs_to :image
end

我想得到所有正在使用的图片,并通过不同的查询得到所有未使用的图片(基于 AssociatedImage).

我试过 Image.joins(:associated_images).group('images.id').having('count(image_id) > 0') 并返回正确的结果。但当我运行 Image.joins(:associated_images).group('images.id').having('count(image_id) = 0')它返回一个空的 #<ActiveRecord::Relation []> 我不知道为什么是这样。

我的查询是基于 查找所有关联数大于零的记录。的讨论

解决方案:

原因是在SQL中,当没有行的时候,计数为零。 所以如果没有行,甚至没有组,就没有结果。

你想要的是

Image.left_joins(:associated_images).where(associated_images: {id: nil}).group('images.id')

当SQL进行左连接时,对于一个没有关联图像的图像,它将在 associated_images 表。 所以,那些在 associated_images.id 是零,是我们想要的。

给TA打赏
共{{data.count}}人
人已打赏
未分类

绝对值div中的多个省略号无法使用

2022-9-11 14:40:39

未分类

如何根据字符串的索引打印字母?String.charAt(index)

2022-9-11 14:40:41

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索