从rails控制台销毁关联对象

时间:2014-08-12 19:26:46

标签: ruby-on-rails ruby

我收到nil:NilClass错误,所以我在rails c上诊断出问题,见下文:

irb(main):016:0> a = Product.find(216)
=> #<Product id: 216, ....>
irb(main):017:0> a.related_products
  RelatedProduct Load (1.4ms)  SELECT "related_products".* FROM "related_products" WHERE "related_products"."product_id" = 216
=> [#<RelatedProduct id: 162, product_id: 216, related_id: 248, created_at: "2013-08-20 15:37:03", updated_at: "2013-08-20 15:37:03">]

这里的问题是related_id:248不存在并在控制台上确认:

Product.find(248)

我明白了:

SELECT "products".* FROM "products" WHERE "products"."id" = $1 LIMIT 1  [["id", 248]]
ActiveRecord::RecordNotFound: Couldn't find Product with id=248

我的问题是:

1)如何在rails控制台上删除a.related_products,我尝试a.related_products.destroydestroy!

Bonus:有没有办法用一个命令从rails console中删除所有Productsrelated_products

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您应该可以执行类似

的操作
a.related_products.destroy_all

这将是列表中相关产品的destroy 所有

Product.destroy_all(related_products: nil)

这将遍历所有产品,并查看related_products字段是否为空。

您可能还想设置依赖性破坏。像

这样的东西
class MyModel < ActiveRecord::Base
  has_many :related_products, dependent: :destroy
end

答案 1 :(得分:1)

要删除related_products为空的所有产品,请检查destroy_all Product.destroy_all(related_products: nil)

同时检查模型中的dependent: :destroy