Appending a record in many to many relationship

Hello,     I have the following mailinglist and people model

class Mailinglist < ActiveRecord::Base   has_and_belongs_to_many :people end

class Person < ActiveRecord::Base   has_and_belongs_to_many :mailinglists end

Now, i have created a form to search people. In the result of the search there is a checkbox beside each result. i tick the checkbox and write the mailinglist name in the textbox provided on the results page.

THE PROBLEM IS IF THE LIST IS ALREADY CREATED AND IF I WANT TO ADD ANOTHER PERSON TO THE LIST HOW CAN I DO THAT.

IF I USE UPDATE_ATTRIBUTES THE OLD PEOPLE ARE MOVED OUT OF THE LIST AND ONLY THE NEW ONES are added. i want to add the new people to the list without removing the old ones. my three tables are people mailinglists mailinglists_people i HAVE A COMBO BOX SELECTION on the result page TO SELECT THE LIST IN WHICH I NEED TO ADD PEOPLE.

Thank you.

this should do it:

@mailing_list = MailingList.find(...) @person = Person.find(...)

@mailing_list.people << @person

only that:

class Mailinglist < ActiveRecord::Base   has_and_belongs_to_many :people end

should be:

class Mailinglist < ActiveRecord::Base   has_and_belongs_to_many :persons end

then my last line: @mailing_list.people << @person should be @mailing_list.persons << @person

or you have used :foreign_key ?

@Thorsten

only that:

class Mailinglist < ActiveRecord::Base   has_and_belongs_to_many :people end

should be:

class Mailinglist < ActiveRecord::Base   has_and_belongs_to_many :persons end

The association is defined correctly. Check your console:

"person".pluralize

=> "people"

@Ank You might also consider using a named association rather than has_and_belongs_to_many because it gives you much more control over the association.

For example:

class MailingList < ARec::Base   has_many :subscriptions   has_many :people, :through => :subscriptions end

class Subscription < ARec::Base   belongs_to :mailing_list   belongs_to :person end

class People   has_many :subscriptions   has_many :mailing_lists, :through => :subscriptions

  # for convenience   def subscribe(mailing_list)     subscriptions.create(:mailing_list=>mailing_list)   end end

Then Thorsten's code would be: @mailing_list = MailingList.find(...) @person = Person.find(...) @person.subscribe(@mailing_list) if @mailing_list && @person

Hi Andy, thank you for correcting me there, english is not my native language, so i went for the simple form

and of course you're right, i can't even think of any code where i ever used the basic habtm relationship myself :slight_smile:

Thorsten Mueller wrote:

this should do it:

@mailing_list = MailingList.find(...) @person = Person.find(...)

@mailing_list.people << @person

only that:

class Mailinglist < ActiveRecord::Base   has_and_belongs_to_many :people end

Thanks a ton.......