在另一个表中获取Nil的对象

时间:2013-09-25 15:30:18

标签: sql ruby-on-rails

所以我有一张桌子。我需要得到没有链接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

1 个答案:

答案 0 :(得分: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}来检查是否有效,以检查返回的数组是否只包含零。