0

所以我有一张很多桌子。我需要获取没有链接 image_container 的所有批次。我认为最好的方法是加入,它只会给我很多没有图像容器的东西。Rails的默认设置Join与此完全相反。找到没有图像的批次的最佳途径是什么?

@lots = @event.lots.order("#{sort_column} #{sort_direction}").page params[:page]
@lots = @lots.joins(:image_containers)

获得很多没有的最好方法是什么image_container

Image_container 是一个多态对象。所以 Image_container 的 imageable_type 为“Lot”,而 imageable_id 是 Lot 的 id。

image_container 模型:

belongs_to :imageable, :polymorphic => true
belongs_to :image, :inverse_of => :image_containers

事件模型:

has_many :image_containers, :as => :imageable, :inverse_of => :imageable, :dependent => :destroy
has_many :images, :through => :image_containers

地块型号:

has_many :image_containers, :as => :imageable, :inverse_of => :imageable, :dependent => :destroy
has_many :images, :through => :image_containers
4

1 回答 1

1

您应该能够找到将 image_container_id 设置为的批次nil

@lots = @lots.joins("LEFT OUTER JOIN image_containers ON image_containers.imageable_id = lots.id AND image_containers.imageable_type = 'Lot' WHERE image_containers.id IS NULL")

希望这可行,我自己对连接查询不是很熟悉。您可以通过.map{|lot| lot.image_containers.count}在查询末尾添加以检查返回的数组是否仅包含零来测试这是否有效。

于 2013-09-25T15:57:33.433 回答