This project is archived and is in readonly mode.

#4464 ✓stale
gsaravia

instances of a Join Model should have their before_destroy callbacks called when destroyed through @instance.others.clear or @instance.update_attributes

Reported by gsaravia | April 23rd, 2010 @ 07:16 PM

with the following setup:

class Foo < ActiveRecord::Base

  has_many :bars, :through => :foo_bar_joins
  has_many :foo_bar_joins

end

class Bar < ActiveRecord::Base

  has_many :foos, :through => :foo_bar_joins
  has_many :foo_bar_joins
  
end

class FooBarJoin < ActiveRecord::Base

  belongs_to :foo
  belongs_to :bar
  
  before_destroy :i_am_called
  
  def i_am_called
    raise FooBarJoinBeforeDestroyCallbackIsCalled
  end
  
end

class FooBarJoinBeforeDestroyCallbackIsCalled < StandardError 
end

Then the following test should pass:

describe FooBarJoin do
  
  it "'s before_destroy callback should be called when it is called through Association's clear method" do
    foo = Foo.create
    bar = Bar.create
    foo.bars << bar
    #the next line should raise an error when it executes foobarjoin's before_destroy callback..
    foo.bars.clear.should raise_error(FooBarJoinBeforeDestroyCallbackIsCalled)
  end 
  
end

The before_destroy callback should also be called when foo.update_attributes removes instances of FooBarJoin

The above code is included as a rails app.

Comments and changes to this ticket

  • Anil Wadghule

    Anil Wadghule April 23rd, 2010 @ 08:13 PM

    Verified this issue. I not sure whether Rails supports calling callbacks on join model for association methods.

  • joost baaij
  • Santiago Pastorino

    Santiago Pastorino February 2nd, 2011 @ 04:43 PM

    • State changed from “new” to “open”

    This issue has been automatically marked as stale because it has not been commented on for at least three months.

    The resources of the Rails core team are limited, and so we are asking for your help. If you can still reproduce this error on the 3-0-stable branch or on master, please reply with all of the information you have about it and add "[state:open]" to your comment. This will reopen the ticket for review. Likewise, if you feel that this is a very important feature for Rails to include, please reply with your explanation so we can consider it.

    Thank you for all your contributions, and we hope you will understand this step to focus our efforts where they are most helpful.

  • Santiago Pastorino

    Santiago Pastorino February 2nd, 2011 @ 04:43 PM

    • State changed from “open” to “stale”
  • bingbing

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile »

<h2 style="font-size: 14px">Tickets have moved to Github</h2>

The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>

People watching this ticket

Attachments

Pages