Ruby on rails 在Rails中查找缺少关联记录的记录
我有一个遗留数据库,其中有两个模型:Ruby on rails 在Rails中查找缺少关联记录的记录,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个遗留数据库,其中有两个模型: class Purchase belongs_to :product end class Product has_many :purchases end 现在,随着时间的推移,一些产品被删除,即使相关的购买仍存在于数据库中。有什么方法可以从rails控制台中获取所有相关产品已被删除的采购的列表吗 Mypurchase表引用了product,并且有一列product\u id为什么不在删除产品时取消购买 class Product has_ma
class Purchase
belongs_to :product
end
class Product
has_many :purchases
end
现在,随着时间的推移,一些产品
被删除,即使相关的购买
仍存在于数据库中。有什么方法可以从rails控制台中获取所有相关产品已被删除的采购
的列表吗
Mypurchase
表引用了product
,并且有一列product\u id
为什么不在删除产品时取消购买
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)
所以像这样,它现在应该可以工作了为什么不在删除产品时取消购买
class Product
has_many :purchases, :dependent => :nullify
end
Purchase.left_outer_joins(:product).where(products: {id: nil})
这样,您所要做的就是查询product_id为null的采购。希望这有帮助
编辑:
如果您现在正在使用此方法,为了更新旧记录并使其保持一致,您应该执行以下操作:
Purchase.where.not(product_id: Product.select(:id).distinct).update_all(product_id: nil)
所以像这样,它现在应该可以工作了
Purchase.left_outer_joins(:product).where(products: {id: nil})
注意:导轨5有
所以在这里,基本上它将导致所有没有关联产品的购买
注意:导轨5有
因此,这里基本上会导致所有没有关联产品的购买。我现在这样做了,但我仍然有缺少关联的旧记录。@RonanLopes对于您的种类信息映射在内部进行循环,这是没有效率的。不过,这也可以在sql查询中完成。@Gabbar是的,我知道。。。但是,由于这是一件只能执行一次的事情,我认为这不是一个问题…@Gabbar有没有一种更快捷的方法可以在不使用地图的情况下获取该案例的ID数组列表?@RonanLopes当然!你可以使用pulk
像Product.pulk(:id)
,这将启动sql查询,而不是通过循环和sql查询可以完成的事情,我们为什么要通过循环呢?我现在就这么做了,但我仍然有丢失关联的旧记录。@RonanLopes为您的同类信息映射内部通过循环,这是无效的。不过,这也可以在sql查询中完成。@Gabbar是的,我知道。。。但是,由于这是一件只能执行一次的事情,我认为这不是一个问题…@Gabbar有没有一种更快捷的方法可以在不使用地图的情况下获取该案例的ID数组列表?@RonanLopes当然!你可以使用pulk
像Product.pulk(:id)
,这将启动sql查询,而不是通过循环和sql查询可以完成的事情,我们为什么要通过循环?购买。Product\u id
不是NULL
它只是不再引用现有产品可能你的意思是产品:{id:nil}
@engineersmnky噢,对不起,我弄错了,谢谢你纠正我的错误!购买。产品\u id
不是NULL
它只是不再引用现有产品可能你的意思是产品:{id:nil}
@engineersmnky噢,对不起,我弄错了,谢谢你纠正我!删除了,因为接受的答案是答案删除了,因为接受的答案是答案