我收到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.destroy
和destroy!
Bonus:有没有办法用一个命令从rails console中删除所有Products
空related_products
?
提前感谢您的帮助!
答案 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
。