Haha! very good :)

On Friday, December 18, 2015 at 10:39:49 AM UTC+13, Eric Krause wrote:
>
> I just did that this morning. 
>
> On Thursday, December 17, 2015, spike22 <[email protected] 
> <javascript:>> wrote:
>
>> Hi Eric, that's really interesting! I'll give it a whirl and report back 
>> :) I might do a documentation pull request to clarify this too.
>>
>> Have a great day!
>>
>> Brendon
>>
>> On Friday, December 18, 2015 at 6:23:50 AM UTC+13, Eric Krause wrote:
>>>
>>> I responded on stackoverflow, but I'll do here as well so that it is 
>>> covered everywhere on the internet.
>>>
>>> In my case I was doing something similar to what you were doing and was 
>>> running into the same issue with the join table being deleted instead of 
>>> destroyed.
>>>
>>> I started looking through the code and I believe the documentation is 
>>> just out of date.
>>> [has_many_through_association](
>>> https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/has_many_through_association.rb#L131
>>> )
>>>
>>> All you need to do is add the dependent: :destroy to the has_many 
>>> :through relationship.
>>>
>>>     class User
>>>       has_many :partnerships, dependent: :destroy
>>>       has_many :partners, through: :partnerships, dependent: :destroy
>>>     end
>>>
>>> The pain I was dealing with was:
>>>     
>>>     user.partner_ids = [1,2,3]
>>>     #creates the relationships
>>>     user.partner_ids = []
>>>     #was deleting the records from partnerships without callbacks.
>>>
>>> The dependent: :destroy on the partners relationship fixed that.  
>>> Callbacks are now being run and things are good again.
>>>
>>> Eric
>>>
>>> On Monday, December 14, 2015 at 5:43:57 PM UTC-7, spike22 wrote:
>>>>
>>>> I've asked this on on Stack Overflow but didn't receive much of a 
>>>> response:
>>>>
>>>> The Rails 4 documentation says this regarding destroy callbacks on the 
>>>> join model for a has_many :through relationship:
>>>>
>>>> collection=objects Replaces the collections content by deleting and 
>>>> adding objects as appropriate. If the :through option is true callbacks in 
>>>> the join models are triggered except destroy callbacks, since deletion is 
>>>> direct.
>>>>
>>>> Thankfully it's documented at least, but I want to know why on earth 
>>>> this is the case? It makes more sense to trigger destroy callbacks (or 
>>>> have 
>>>> the option to) on a :through since these types of models can have destroy 
>>>> callbacks and other associations.
>>>>
>>>> In my case I had a has_and_belongs_to_many relationship on the join 
>>>> tables model off to another model. The records on that second join table 
>>>> would never be deleted when the associated records on the first join table 
>>>> were deleted. I resorted to this which feels hacky, and I have to repeat 
>>>> myself on each side of the :through relationship:
>>>>
>>>> class SchoolsTemplate < ActiveRecord::Base
>>>>
>>>>   belongs_to :school
>>>>   belongs_to :template
>>>>
>>>>   has_and_belongs_to_many :groups
>>>>
>>>> end
>>>>
>>>>
>>>> class School < ActiveRecord::Base
>>>>
>>>>   has_many :schools_templates, dependent: :destroy
>>>>   has_many :templates, through: :schools_templates, before_remove: 
>>>> :remove_groups_school_templates
>>>>
>>>>   private
>>>>   def remove_groups_school_templates(template)
>>>>     schools_templates.where(template: template).first.groups.clear  end
>>>>
>>>> end
>>>>
>>>> There's a validation to 'ensure' uniqueness on the join tables records 
>>>> between the two foreign keys, so that's why I can call first in the 
>>>> callback.
>>>>
>>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "Ruby on Rails: Talk" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/rubyonrails-talk/eGJRC4hDDuQ/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected].
>> To post to this group, send email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/rubyonrails-talk/9eb239ab-b444-4b74-837d-503b589516a2%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/rubyonrails-talk/9eb239ab-b444-4b74-837d-503b589516a2%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
>
> Eric Krause
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/9764458c-f0a0-4a16-aa14-3a03d1f2ee8a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to