所以我有一张桌子。我需要得到没有链接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
答案 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}
来检查是否有效,以检查返回的数组是否只包含零。