What does dependent: :destroy do in a Rails association?
It deletes all associated child records when the parent record is deleted, ensuring no orphaned records remain.
Click to reveal answer
beginner
What is the effect of dependent: :nullify in a Rails model association?
It sets the foreign key of associated child records to NULL instead of deleting them when the parent is deleted.
Click to reveal answer
intermediate
When should you use dependent: :destroy instead of dependent: :nullify?
Use destroy when child records should be removed with the parent to keep data clean. Use nullify when child records should remain but lose their link to the deleted parent.
Click to reveal answer
beginner
What happens if you don't specify any dependent option in a Rails association?
The associated child records remain unchanged when the parent is deleted, which can lead to orphaned records with invalid foreign keys.
Click to reveal answer
intermediate
Explain the difference between dependent: :destroy and dependent: :delete_all.
destroy runs callbacks on each child before deleting, while delete_all deletes all children directly in the database without callbacks.
Click to reveal answer
What does dependent: :nullify do when the parent record is deleted?
ASets child records' foreign keys to NULL
BDeletes all child records
CRaises an error
DDoes nothing
✗ Incorrect
dependent: :nullify sets the foreign key in child records to NULL, keeping the child records but removing their link to the parent.
Which dependent option runs callbacks on child records before deletion?
Anullify
Bdestroy
Cdelete_all
Drestrict_with_exception
✗ Incorrect
dependent: :destroy runs callbacks on each child record before deleting it.
If you want to keep child records but remove their link to the parent, which option do you use?
Adependent: :restrict_with_error
Bdependent: :destroy
Cdependent: :delete_all
Ddependent: :nullify
✗ Incorrect
dependent: :nullify keeps child records but sets their foreign key to NULL.
What risk exists if you omit the dependent option in a has_many association?
AOrphaned child records may remain
BChild records are automatically deleted
CParent record cannot be deleted
DForeign keys are set to NULL
✗ Incorrect
Without dependent, deleting a parent leaves child records with foreign keys pointing to a non-existent parent, causing orphaned records.
Which dependent option deletes child records directly in the database without callbacks?
Adestroy
Bnullify
Cdelete_all
Drestrict_with_exception
✗ Incorrect
dependent: :delete_all deletes child records directly in the database, skipping callbacks.
Describe how dependent: :destroy and dependent: :nullify affect child records when a parent record is deleted in Rails.
Think about whether child records are deleted or kept.
You got /4 concepts.
Explain why it is important to use the dependent option in Rails associations.
Consider what happens to child records when the parent is removed.
You got /4 concepts.
Practice
(1/5)
1. What does dependent: :destroy do in a Rails model association?
easy
A. Deletes associated records when the parent record is deleted.
B. Sets associated records' foreign keys to null when the parent is deleted.
C. Prevents deletion of the parent record if associated records exist.
D. Copies associated records to a backup table before deletion.
Solution
Step 1: Understand the role of dependent option
The dependent option in Rails associations controls what happens to associated records when the parent is deleted.
Step 2: Identify behavior of :destroy
The :destroy option deletes all associated records automatically when the parent record is deleted.
Final Answer:
Deletes associated records when the parent record is deleted. -> Option A
Quick Check:
dependent: :destroy = deletes associated records [OK]
Hint: Destroy deletes children; nullify just clears foreign keys [OK]
Common Mistakes:
Confusing :destroy with :nullify behavior
Thinking :destroy prevents parent deletion
Assuming it backs up records before deletion
2. Which is the correct syntax to set an association to nullify dependent records in Rails?
easy
A. has_many :comments, dependent: :delete_all
B. has_many :comments, dependent: :remove
C. has_many :comments, dependent: :nullify
D. has_many :comments, dependent: :destroy_all
Solution
Step 1: Recall valid dependent options in Rails
Rails supports :destroy, :delete_all, and :nullify as valid dependent options.
Step 2: Identify the option that sets foreign keys to null
dependent: :nullify sets the foreign keys of associated records to null instead of deleting them.
Final Answer:
has_many :comments, dependent: :nullify -> Option C
Quick Check:
dependent: :nullify = sets foreign keys to null [OK]
Hint: Use :nullify to keep records but clear foreign keys [OK]
Common Mistakes:
Using :destroy_all which is invalid
Confusing :delete_all with :nullify
Using non-existent :remove option
3. Given the models:
class Post < ApplicationRecord
has_many :comments, dependent: :nullify
end
class Comment < ApplicationRecord
belongs_to :post, optional: true
end
What happens to comments when a post is deleted?
medium
A. Comments remain but their post_id is set to null.
B. All comments are deleted from the database.
C. Comments remain unchanged with the same post_id.
D. An error occurs because comments must belong to a post.
Solution
Step 1: Analyze the dependent option in Post model
The dependent: :nullify option means when a post is deleted, associated comments' foreign keys (post_id) are set to null.
Step 2: Check if comments can have null post_id
The belongs_to :post, optional: true allows comments to exist without a post, so setting post_id to null is valid.
Final Answer:
Comments remain but their post_id is set to null. -> Option A
Hint: Nullify keeps records but clears foreign keys if optional true [OK]
Common Mistakes:
Assuming comments get deleted with post
Ignoring optional: true and expecting errors
Thinking comments keep old post_id after deletion
4. Identify the error in this Rails model code:
class User < ApplicationRecord
has_many :posts, dependent: :nullify
end
class Post < ApplicationRecord
belongs_to :user
end
medium
A. belongs_to should be has_many in Post model.
B. No error; code works as expected.
C. dependent: :nullify is invalid syntax for has_many.
D. Posts cannot have null user_id because belongs_to is not optional.
Solution
Step 1: Understand dependent: :nullify effect
It sets foreign keys of associated posts to null when a user is deleted.
Step 2: Check belongs_to association in Post
belongs_to :user by default requires user_id to be present (not null). Since it's not marked optional, nullifying user_id causes validation or DB errors.
Final Answer:
Posts cannot have null user_id because belongs_to is not optional. -> Option D
Hint: Use optional: true with nullify to avoid errors [OK]
Common Mistakes:
Assuming nullify works without optional: true
Thinking dependent: :nullify is invalid syntax
Confusing belongs_to with has_many in Post
5. You have a Library model with many Books. You want to delete a library and automatically delete all its books. But if a Book has Reviews, you want to keep the reviews but remove the book reference (set book_id to null). Which setup correctly achieves this?
hard
A. Library has_many :books, dependent: :destroy; Book has_many :reviews, dependent: :destroy; Review belongs_to :book, optional: true
B. Library has_many :books, dependent: :destroy; Book has_many :reviews, dependent: :nullify; Review belongs_to :book, optional: true
C. Library has_many :books, dependent: :nullify; Book has_many :reviews, dependent: :destroy; Review belongs_to :book
D. Library has_many :books, dependent: :nullify; Book has_many :reviews, dependent: :nullify; Review belongs_to :book
Solution
Step 1: Set Library to delete all books on deletion
Using dependent: :destroy on has_many :books deletes all books when a library is deleted.
Step 2: Set Book to nullify reviews instead of deleting
Using dependent: :nullify on has_many :reviews keeps reviews but sets their book_id to null.
Step 3: Allow reviews to have null book_id
Marking belongs_to :book, optional: true in Review allows book_id to be null without errors.
Final Answer:
Library has_many :books, dependent: :destroy; Book has_many :reviews, dependent: :nullify; Review belongs_to :book, optional: true -> Option B