我在下面的列中有一个表
id,user_id,friend_user_id
如果A是B的朋友那么,我想插入两个记录,如 1. user_id:1,friend_user_id:2 2. user_id:2,friend_user_id:1
我是使用after_create回调完成的,如下所示
after_create do
Friend.create(user_id: friend_user_id,friend_user_id: user_id)
end
如果删除了任何一条记录,我想删除这两条记录。
我已尝试过after_destroy回调,如下所示。
after_destroy do
Friend.where(friend_user_id: user_id,user_id: friend_user_id).first.destroy
end
但我收到以下错误。
2.3.0 :002 > Friend.first.destroy
Friend Load (0.4ms) SELECT "friends".* FROM "friends" ORDER BY "friends"."id" ASC LIMIT 1
(0.2ms) begin transaction
SQL (0.7ms) DELETE FROM "friends" WHERE "friends"."id" = ? [["id", 10]]
Friend Load (0.3ms) SELECT "friends".* FROM "friends" WHERE "friends"."friend_user_id" = ? AND "friends"."user_id" = ? ORDER BY "friends"."id" ASC LIMIT 1 [["friend_user_id", 1], ["user_id", 2]]
SQL (0.1ms) DELETE FROM "friends" WHERE "friends"."id" = ? [["id", 11]]
Friend Load (0.1ms) SELECT "friends".* FROM "friends" WHERE "friends"."friend_user_id" = ? AND "friends"."user_id" = ? ORDER BY "friends"."id" ASC LIMIT 1 [["friend_user_id", 2], ["user_id", 1]]
(0.3ms) rollback transaction
NoMethodError: undefined method `destroy' for nil:NilClass
from /home/ubuntu/workspace/app/models/friend.rb:39:in `block in <class:Friend>'
我是RoR的新手。任何帮助将不胜感激。
答案 0 :(得分:0)
你的代码在这里是非常错误的,你最终会得到SystemStackError,这会发生在after_create和after_destroy的两个地方。发生的事情是,当你销毁一个元素时,你的after_destroy回调会被执行,这将再次销毁一个元素,因为它已经删除了一个元素,它将再次执行一个回调,但是因为你删除了那个元素就是为什么你得到了这个错误NoMethodError: undefined method
销毁'为nil:NilClass`,因为该元素已被删除,为了获得更清晰的图片使用相同的代码并做一个Friend.create,你会看到我在说什么。