HABTM孤立记录 - 活动记录查询?

时间:2014-02-17 18:41:56

标签: ruby-on-rails ruby-on-rails-3 activerecord

Rails 3: 我在产品模型和成分模型之间有HABTM关系。我有一堆孤立的成分,我想从数据库中删除,所以我需要查询这些成分,以删除它们。我猜有一种简单的方法可以做到这一点。有人可以帮帮我吗?我希望这可以工作,但我得到一个未定义的列错误

Ingredient.joins(:products).where(products: [])

4 个答案:

答案 0 :(得分:1)

products很可能不是您的任何一个列的列。我认为这样的事情会起作用(假设产品有name,否则替换为实际存在的任何一列):

Ingredient.joins(:products).where("products.name IS NULL")

答案 1 :(得分:1)

查看here - >

这看起来是正确的:

Ingredient.joins('LEFT JOIN product_ingredients ON ingredients.id = product_ingredients.ingredient_id').where('product_ingredients.ingredient_id IS NULL').all

答案 2 :(得分:0)

Ingredient.all.map { | ingredient | ingredient.products.empty? }

这应该映射具有该空关系的所有成分。你也可以尝试:

Ingredient.all.map { | ingredient | ingredient.products.count > 0 }

希望它有所帮助!

答案 3 :(得分:0)

找到答案here

请注意,SQL查询在连接表上执行左JOIN,在本例中为'product_ingredients'

Ingredient.joins('LEFT JOIN product_ingredients ON ingredients.id = product_ingredients.ingredient_id').where('product_ingredients.ingredient_id IS NULL').all