Finnnn
Finnnn

Reputation: 3580

rails 3 - delete all related records to user - prevent orpahn data

I've a simple blog style system where a user can have many entries.

I've tried to delete all of a users entries by doing the following -

user = User.find_by_id(1)
user.entries.delete_all

This hasn't succeeded in deleting the related entries, it has just set the user_id in that entry to nil -

<Entry id: 20, content: "test", user_id: nil, created_at: "2011-10-31 10:26:18", updated_at: "2011-10-31 10:26:18", attachment_id: nil, likes_count: nil, comments_count: nil> 

A few questions, if you don't mind -

How can I ensure that all entries with no owner are deleted, and that their related info is deleted also? Based on the example above - I'd like to remove the entry and it's related comments

How should I have initially avoided this problem? I presume my user.entries.delete_all command was the wrong thing to do.

Upvotes: 1

Views: 2835

Answers (1)

Marian Theisen
Marian Theisen

Reputation: 6353

do you know the difference between destroy and delete in Rails? if you use destroy Rails will instantiate the records to remove first, and call all callbacks associated with destroy (before, after, around and cascading to associations). you could therefore create a after_destroy callback which destroys all user related data, entries etc. or you declare your has_many relationship with :dependent => :destroy, which automatically adds a callback to destroy all related items

Upvotes: 7

Related Questions