检查模型是否具有嵌套模型连接

时间:2017-03-16 15:21:02

标签: ruby-on-rails activerecord

我有3个模型:CollectionProductGallery。并非每个产品都有画廊。我怎么找到那些?

这就是我的意思:

Collection.find_each do |collection|
  collection.products.each do |product|
    next if collection.products.empty?
    puts "Product #{product.id} does not have gallery" unless product.galleries.present?
  end
end

这是一种糟糕的方式,因为它会发送大量查询。我该如何改进?

UPD。

class Collection    
  has_many :products
end

class Product    
  belongs_to :collection
  has_many :galleries
end

class Gallery    
  belongs_to :product
end

1 个答案:

答案 0 :(得分:1)

要在一个查询中获取“所有没有画廊的产品”,您可以使用此行代码

Product.includes(:galleries).where(galleries: {id: nil})