2010-05-31 26 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

相關問題