获取 STI 中的记录以获取 rails 4 中的空 has_many 记录

Posted

技术标签:

【中文标题】获取 STI 中的记录以获取 rails 4 中的空 has_many 记录【英文标题】:Fetch records in STI for empty has_many records in rails 4 【发布时间】:2015-02-18 09:58:40 【问题描述】:

我有一个模型库,它 has_many :images, as: :imageable,dependent: :destroy 和属于_to :imageable, polymorphic: true 的图像模型。这里使用的是单表继承。现在我想获取并隐藏没有关联图像的画廊。该怎么办?

【问题讨论】:

【参考方案1】:

如果您只是想最有效地获取所有关联为空的画廊,您可以使用此范围:

# in Gallery.rb

scope :no_images, -> 
  joins('LEFT OUTER JOIN images ON images.imageable_id = galleries.id).
  group('galleries.id').
  having('count(imageable_id) = 0') 

运行 Gallery.no_images 将返回所有没有关联图像的 Galleryobjects。

请注意,文档对使用单表继承的多态关联有以下说明:

结合单表使用多态关联 继承(STI)有点棘手。为了让协会 按预期工作,确保存储 STI 的基本模型 多态关联的类型列中的模型。接着说 对于上面的资产示例,假设有访客帖子和成员 将帖子表用于 STI 的帖子。在这种情况下,必须有一个 在帖子表中键入列。

因此,请确保您已将 type 列正确设置为正确的值(在您的情况下为“图像”)。

【讨论】:

【参考方案2】:

试试这个

Gallery.all.each do |gallery|
   galleries << gallery if (gallery.images.empty?)
end

【讨论】:

以上是关于获取 STI 中的记录以获取 rails 4 中的空 has_many 记录的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5:在连接表记录上保存记录时的 STI 空键

Rails 4 - 如何在活动记录查询中为包含()和连接()提供别名

Rails STI 和视图重用

Rails:获取下一个/上一个记录

Rails 3:获取随机记录

如何在Rails 5中获取具有匹配ID的连接表中的记录数