Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

Fixed AssociationCollection#<< resulting in unexpected values in @target when :uniq => true

#738

When AssociationCollection#<< is called, it invokes #add_record_to_target_with_callbacks, which doesn't pay any attention to the reflection's :uniq option before pushing to the @target array, and can result in unexpected values showing up in @target until @target is reloaded. This patch resolves this issue.

Reported by Ernie Miller · August 2nd, 2008 @ 04:49 PM

State: resolved
Milestone: 2.x
Assigned to: Michael Koziarski Michael Koziarski
Importance: none

Activity

  1. Ernie Miller
  2. wildchild
    wildchild
    • Tag changed from activerecord, enhancement, patch to activerecord, bug, patch

    +1 for this feature. Should we fire callbacks for already duplicate records?

    In patch:

    @target << record unless @reflection.options[:uniq] && @target.include?(record) callback(:after_add, record)

    Why not:

    unless @target.include?(record) @target << record unless @reflection.options[:uniq] callback(:after_add, record) end

    Cheers.

    August 7th, 2008 @ 04:24 AM

  3. Ernie Miller
    Ernie Miller

    I debated about that. In the end, since ActiveRecord doesn't actually prevent duplicate records in the DB, but only in the @target array, when :uniq is set, I felt it would be presumptuous to mess with callbacks. There could be a very legitimate bit of data massaging going on there.

    August 7th, 2008 @ 11:46 AM

  4. Michael Koziarski
    Michael Koziarski
    • Assigned user set to Michael Koziarski

    Shouldn't it raise an exception if you try to do this? Silently ignoring the call seems like a potential cause of lots of bugs.

    August 8th, 2008 @ 01:50 PM

  5. Michael Koziarski
    Michael Koziarski
    • State changed from new to resolved

    August 8th, 2008 @ 02:19 PM