Gagan
Gagan

Reputation: 573

how to add records to has_many :through association in Ruby on rails

I have these models

class EventGroups < ActiveRecord::Base      
  has_many  :festival_venues
  has_many  :venues, :through => :festival_venues    
end

class Venue < ActiveRecord::Base 
  has_many  :festival_venues
  has_many  :event_groups, :through => :festival_venues 
end

class FestivalVenue < ActiveRecord::Base 
  belongs_to :event_group
  belongs_to :venue
end
  1. Now I want to create a Venue via Eventgroups, and record in the FestivalVenue should be created as well.
  2. When i delete Eventgroups related record in Venue and FestivalVenue should be deleted as well.

How can i do this?

Upvotes: 0

Views: 3177

Answers (2)

Marek Lipka
Marek Lipka

Reputation: 51151

class EventGroup < ActiveRecord::Base      
  has_many  :festival_venues, dependent: :destroy
  has_many  :venues, :through => :festival_venues, :dependent => :destroy
end

class Venue < ActiveRecord::Base 
  has_many  :festival_venues
  has_many  :event_groups, :through => :festival_venues  
end

class FestivalVenue < ActiveRecord::Base 
  belongs_to :event_group
  belongs_to :venue
end

Now if you have event_group variable bound to EventGroup object, you create Venue (along with its FestivalVenue) with:

venue = Venue.create(your_attributes)
event_group.venues << venue

Upvotes: 4

Rails Guy
Rails Guy

Reputation: 3866

In your below code, Model class name must be singular. Change class name EventGroups to EventGroup. Now it will work like a charm.

class EventGroup < ActiveRecord::Base      
  has_many  :festival_venues, dependent: :destroy
  has_many  :venues, :through => :festival_venues, :dependent => :destroy
end

Remaining code is good.

class Venue < ActiveRecord::Base 
  has_many  :festival_venues
  has_many  :event_groups, :through => :festival_venues  
end

class FestivalVenue < ActiveRecord::Base 
  belongs_to :event_group
  belongs_to :venue
end

Hope it will help. Thanks

Upvotes: 1

Related Questions