2010-05-31 25 views
0

我有以下几点:的has_many通过并保存到连接表

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 

我想创建一个方法与invite_text和UserComms作为变量列表邀请,然后把它创建一个新的邀请用下面的验证:
1.所有UserComms是唯一
2.邀请不会被保存,除非所有相关InviteRecipients保存以及 (换句话说,邀请是不是有效,除非所有创建InviteRecipients是有效)

我不熟悉如何创建模型函数。此外,当我尝试这样的事:

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! 

我得到:SystemStackError:堆栈层次过深

回答

0

您需要使用i.recipients不invite_recipients! 像这样:

i.recipients.create(:user_comm => user_comm1) 
i.recipients.create(:user_comm => user_comm2) 
+0

事实上,这也不管用,但这:i.recipients << user_comm1。不过,问题在于我无法在InviteRecient上设置任何属性。 – Paul 2010-06-01 05:35:01

相关问题