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

时间:2015-02-18 09:58:40

标签: ruby-on-rails inheritance hide record

我有一个模型库has_many:images,as :: imageable,dependent :: destroy和图像模型belongs_to:imageable,polymorphic:true。这里使用单表继承。现在我想获取并隐藏没有与之关联的图像的库。怎么去呢?

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

如果您只想最有效地获取具有空关联的所有图库,则可以使用此范围:

# 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将返回没有关联图像的所有Gallery个对象。

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

  

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

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