I'm working with Rails and PostgreSQL and have a basic one-to-many relationship going on, one Auction
has many Bid
s. However when I try and delete an auction (that has bids present) I get the following error:
ERROR: update or delete on table "auctions" violates foreign key constraint "fk_rails_43e9021cbf" on table "bids". DETAIL: Key(id)=(1) is still referenced from table "bids".
Deleting auctions with no bids gives no error.
The part that confuses me is that inside my Auction
model, I have:
has_many :bids, dependent: :destroy
Since I have a dependent destroy clause, why am I still getting this error?
EDIT: I've tried dropping the whole DB, then recreating/re-migrating everything - still get the same error.
My issue was that i am using @auction.delete
(visible in the screenshot I posted) when trying to remove a record.
Delete will ignore any callbacks I have in place. So even though I have a dependent destroy clause, it is not being called - hence Rails is throwing an error. If/When I changed the code to read @auction.destroy
, the call-back got invoked and it solved the problem.
Reference: Difference between Destroy and Delete