在Rails中查找缺少关联记录的记录

时间:2018-04-27 19:08:50

标签: ruby-on-rails ruby activerecord

我有一个遗留数据库,我有两个模型:

class Purchase
  belongs_to :product
end

class Product
  has_many :purchases
end

现在随着时间的推移,一些products被删除了,即使数据库中仍然存在关联的purchases。有没有办法可以从rails控制台中获取已关联Purchases的所有products列表?

我的purchase表引用了product,并且列product_id

2 个答案:

答案 0 :(得分:3)

Purchase.left_outer_joins(:product).where(products: {id: nil})

注意栏杆5有left_outer_joins

因此,基本上这将导致所有没有相关产品的购买。

答案 1 :(得分:2)

为什么在删除产品时没有取消购买?

class Product
  has_many :purchases, :dependent => :nullify
end

就像那样,你所要做的就是查询product_id为null的购买。希望这有帮助!

编辑: 如果你现在正在使用这种方法,为了更新旧记录并使它们保持一致,你应该这样做:

Purchase.where.not(product_id: Product.select(:id).distinct).update_all(product_id: nil)

所以这样它现在应该可以使用