has_many through and saving to join table

Posted by Paul on Stack Overflow See other posts from Stack Overflow or by Paul
Published on 2010-05-31T23:28:42Z Indexed on 2010/05/31 23:33 UTC
Read the original article Hit count: 127

Filed under:

I have the following:

class Invite < ActiveRecord::Base
  belongs_to :user
  has_many :invite_recipients
  has_many :recipients, :through => :invite_recipients
end

class InviteRecipient < ActiveRecord::Base
  belongs_to :invite
  belongs_to :user_comm

  validates_associated :user_comm, :invite
  validates_uniqueness_of :user_comm_id, :scope => :invite_id
end

class UserComm < ActiveRecord::Base
end

I'd like to create a method for Invite with invite_text and a list of UserComms as the variables and then have it create a new invite with the following validations:
1. All UserComms are unique
2. The invite isn't saved unless all the associated InviteRecipients are saved as well (in other words, the invite isn't valid unless all the created InviteRecipients are valid)

I'm not familiar with how to create model functions. Moreover, when I try something like this:

i = Invite.new(:invite_text => 'come join')
ir1 = InviteRecipient.new(:invite => i, :user_comm => user_comm1)
ir2 = InviteRecipient.new(:invite => i, :user_comm => user_comm2)
i.invite_recipients = [uc1, uc2]
i.save!

I get: SystemStackError: stack level too deep

© Stack Overflow or respective owner

Related posts about ruby-on-rails