Bird
Raised Fist0
Ruby on Railsframework~5 mins

Association callbacks in Ruby on Rails - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What are association callbacks in Rails?
Association callbacks are special methods that run automatically when you add or remove objects from an association, like has_many or has_one. They help you run code during these changes.
Click to reveal answer
beginner
Name two common association callbacks in Rails.
Two common association callbacks are before_add and after_remove. They run before adding an object to an association and after removing an object, respectively.
Click to reveal answer
intermediate
How do you define a before_add callback on a has_many association?
You add it inside the association like this:
has_many :comments, before_add: :check_comment
Then define the method check_comment in your model to run before adding a comment.
Click to reveal answer
intermediate
What happens if a before_add callback throws an exception?
If a before_add callback raises an error, the object will NOT be added to the association. This lets you stop unwanted changes safely.
Click to reveal answer
intermediate
Can association callbacks access the object being added or removed? How?
Yes, association callbacks receive the object being added or removed as an argument. For example:
before_add :method_name where method_name(added_object) can use that object inside.
Click to reveal answer
Which callback runs before adding an object to a Rails association?
Abefore_add
Bafter_add
Cbefore_save
Dafter_remove
What argument does an association callback method receive?
ANo arguments
BThe parent model
CThe object being added or removed
DThe database connection
If a before_add callback raises an error, what happens?
AThe object is not added
BThe object is still added
CThe callback is ignored
DThe entire transaction rolls back
Which association type supports before_add callbacks?
AAll of the above
Bhas_many
Chas_one
Dbelongs_to
Where do you specify association callbacks in Rails?
AIn the routes file
BIn the controller
CIn the database schema
DInside the association declaration
Explain what association callbacks are and give an example of when you might use one.
Think about how Rails lets you run code when you add or remove related objects.
You got /3 concepts.
    Describe how to add a before_add callback to a has_many association and what happens if the callback raises an error.
    Focus on the association declaration and callback behavior.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the purpose of after_add and after_remove callbacks in Rails associations?
      easy
      A. To define database indexes on associations
      B. To validate the presence of associated records
      C. To preload associated records for performance
      D. To run code automatically when related records are added or removed

      Solution

      1. Step 1: Understand association callbacks

        Rails provides after_add and after_remove callbacks to trigger code when associated records change.
      2. Step 2: Identify their purpose

        These callbacks run automatically when you add or remove related records, helping keep data in sync.
      3. Final Answer:

        To run code automatically when related records are added or removed -> Option D
      4. Quick Check:

        Association callbacks = automatic code on add/remove [OK]
      Hint: Callbacks run code on add/remove related records [OK]
      Common Mistakes:
      • Confusing callbacks with validations
      • Thinking callbacks preload data
      • Assuming callbacks define indexes
      2. Which is the correct syntax to add an after_add callback to a has_many association named comments in a Rails model?
      easy
      A. has_many :comments, after_add: :notify_comment_added
      B. has_many :comments, after_add => :notify_comment_added
      C. has_many :comments do after_add :notify_comment_added end
      D. has_many :comments, callback_after_add: :notify_comment_added

      Solution

      1. Step 1: Recall correct hash syntax for options

        Rails uses symbol keys with colon and value pairs like after_add: :method_name.
      2. Step 2: Match syntax to association

        The correct syntax is has_many :comments, after_add: :notify_comment_added.
      3. Final Answer:

        has_many :comments, after_add: :notify_comment_added -> Option A
      4. Quick Check:

        Use colon syntax for options in associations [OK]
      Hint: Use colon syntax for options in associations [OK]
      Common Mistakes:
      • Using hash rocket => instead of colon :
      • Trying to define callback inside block
      • Using wrong option name like callback_after_add
      3. Given the following code, what will be printed when a new comment is added to a Post?
      class Post < ApplicationRecord
        has_many :comments, after_add: :log_comment_added
      
        def log_comment_added(comment)
          puts "Comment added: #{comment.body}"
        end
      end
      
      post = Post.new
      post.comments << Comment.new(body: 'Nice post!')
      medium
      A. No output
      B. Comment added: Nice post!
      C. Error: undefined method log_comment_added
      D. Comment added:

      Solution

      1. Step 1: Understand after_add callback behavior

        The after_add callback calls log_comment_added with the new comment when added.
      2. Step 2: Check the method output

        The method prints "Comment added: " plus the comment's body, which is "Nice post!".
      3. Final Answer:

        Comment added: Nice post! -> Option B
      4. Quick Check:

        after_add calls method with new record [OK]
      Hint: after_add calls method with added record [OK]
      Common Mistakes:
      • Expecting no output
      • Thinking callback is not triggered on << operator
      • Assuming method is missing error
      4. Identify the error in this Rails model code using after_remove callback:
      class User < ApplicationRecord
        has_many :posts, after_remove: :notify_post_removed
      
        def notify_post_removed
          puts 'Post removed'
        end
      end
      medium
      A. The callback method must accept the removed record as an argument
      B. The callback name should be after_remove_post
      C. The after_remove option is not valid for has_many
      D. The method should be private

      Solution

      1. Step 1: Check callback method signature

        Callbacks like after_remove receive the removed record as an argument.
      2. Step 2: Compare method definition

        The method notify_post_removed has no parameters, so it will cause an error.
      3. Final Answer:

        The callback method must accept the removed record as an argument -> Option A
      4. Quick Check:

        Callback methods need removed record argument [OK]
      Hint: Callback methods must accept the changed record argument [OK]
      Common Mistakes:
      • Defining callback method without parameters
      • Using invalid callback option name
      • Thinking method visibility causes error
      5. You want to track when tags are added or removed from an Article model using has_many :tags. You want to update a counter on Article each time tags change. Which is the best way to implement this using association callbacks?
      hard
      A. Use before_save callback on Article to count tags
      B. Override the tags= setter method to update the counter
      C. Use after_add and after_remove callbacks on has_many :tags to update the counter method
      D. Manually call a method to update the counter after changing tags

      Solution

      1. Step 1: Understand the goal

        You want to update a counter automatically when tags are added or removed.
      2. Step 2: Choose appropriate callback

        after_add and after_remove on has_many :tags run code exactly when tags change.
      3. Step 3: Compare other options

        Overriding setter or using before_save is less direct and can miss changes; manual calls are error-prone.
      4. Final Answer:

        Use after_add and after_remove callbacks on has_many :tags to update the counter method -> Option C
      5. Quick Check:

        Use association callbacks for automatic related record updates [OK]
      Hint: Use after_add and after_remove for automatic updates [OK]
      Common Mistakes:
      • Overriding setter unnecessarily
      • Using before_save which may miss association changes
      • Forgetting to automate updates
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard