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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Robin2 wrote:> 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. > > ThanksProbably, you can try out by assinging empty array like b = Boat.find[1] b.members = [] b.save I didn''t try out -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
What you''re doing is similar to what one would achieve using has_many :through. It is arguably superior to HABTM since you do indeed create a join model for your join table, so you can delete records in a typical way. There are also other advantages to it, such as being able to store extra data in the join table. And example would be like so: class Post < ActiveRecord::Base has_many :taggings, :dependent => :destroy has_many :tags, :through => :taggings emd class Tag < ActiveRecord::Base has_many :taggings, :dependent => :destroy has_many :posts, :though => :taggings end class Tagging < ActiveRecord::Base belongs_to :post belongs_to :tag end So with this setup I could conceivably "tag" Posts, say in a blog type application. This makes available methods like post.tags and post.taggings. If I wanted to remove all the tags from a Post I could use post.taggings.destroy_all. (It''s important not to use post.tags.destroy_all since that would remove those Tags from every Post that has them.) But overall you could use Tagging as you would any other model. I hope that helps. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Dec 3, 2:39 pm, Robin2 <robinmc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> What is the correct way to delete the records in a Join Table (used to > link two files using habtm).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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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 ... On Dec 4, 6:55 am, kevin cline <kevin.cl...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Dec 3, 2:39 pm, Robin2 <robinmc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > What is the correct way to delete the records in a Join Table (used to > > link two files using habtm). > > 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--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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 On Dec 4, 2007, at 4:01 AM, Robin2 <robinmckzz-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > 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 ... > > > > > On Dec 4, 6:55 am, kevin cline <kevin.cl...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> On Dec 3, 2:39 pm, Robin2 <robinmc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> >>> What is the correct way to delete the records in a Join Table >>> (used to >>> link two files using habtm). >> >> 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 > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
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 :-) ...Robin On Dec 4, 1:16 pm, Michael Latta <lat...-ee4meeAH724@public.gmane.org> wrote:> 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 > > On Dec 4, 2007, at 4:01 AM, Robin2 <robinmc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > 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 ... > > > On Dec 4, 6:55 am, kevin cline <kevin.cl...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > >> On Dec 3, 2:39 pm, Robin2 <robinmc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > >>> What is the correct way to delete the records in a Join Table > >>> (used to > >>> link two files using habtm). > > >> 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--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---