How do you delete records in a Join Table

What is the correct way to delete the records in a Join Table (used to
link two files using habtm).

I have resorted to creating a model for the join table. The table is
called boats_members (as it links two tables called boats and members.
And the model is called boats_member (to allow for rails pluralizing).
This way I can do Boats_member.delete_all which works just fine. (I am
also deleting all the records from the boats and members file prior to
rebuilding the whole thing). Because you do not normally need a model
for a join table I suspect there is a "more correct" way to delete the
records.

I have tried using .clear but that did not delete the records in the
join table. I think what I tried was
    b = Boat.find[1]
    b.members.clear
but I have deleted the non-working code and I can't be sure. I'm
pretty sure I tried the .clear after had deleted the records in the
boats and members tables, in case that matters.

I am concerned that if junk remains in the join table it may
accidentally represent an incorrect join between unrelated records -
as well as which the join table might grow to an enormous size if it
cannot be cleared out.

Thanks

When you destroy an active record, RAILS automatically deletes
any corresponding entries in join tables.

class Bee < ActiveRecord:Base
  has_and_belongs_to_many :seas
end

b = Bee.find(...)

b.destroy # Deletes all rows in beas_seas with bee_id = b.id

Thanks,

It looks like my problem was using delete_all when I should have used
destroy_all. The distinction is not clear from the Rails API -
surprise, surprise ...

Be advised that bulk destroy_all can be very slow in some cases. Using
a model and through associations and delete_all can be 5x faster or
more.

Michael

Michael

Thanks,

speed is irrelevant - I only want to use this a few times while I am
developing the app - I am transferring data from an Access database
and splitting it into relational tables. I need to be able to update
the the latest data when I get the transfer process working properly
(which it now seems to be) and when I am given the latest data
(tomorrow?)

As an aside, you wouldn't believe the mess the Access database is in -
all in a single table with, for example separate columns for first
child (i.e. young person), second child etc. And I have cobbled
together a rails app to replace most of it in a couple of days. It
would have taken me longer to re-learn how to use Access as I have
only used it a little bit.

This is an app for my own use as I take over the operation of a club
membership system - so no pressure to make it look nice :slight_smile:

...Robin