2011-06-17 88 views
2

我有一個聯繫has_many活動。如何在Rails 3中顯示has_many關聯的屬性?

和一個廣告系列has_many聯繫人。

但是,聯繫人可能有每個Campaign的start_date和狀態。

例如:

Contact A is active and start_date = 4/4/11 for Campaign 1 

Contact A is stopped and start_date = 3/2/11 for Campaign 1 

感謝。

回答

5

has_many :through可讓您在連接表上定義屬於關係本身的屬性。

class Contact 
    has_many :campaign_contacts 
    has_many :campaigns, :through => :campaign_contacts 
end 

class CampaignContact 
    belongs_to :contact 
    belongs_to :campaign 
end 

class Campaign 
    has_many :campaign_contacts 
    has_many :contacts, :through => :campaign_contacts 
end 

通常情況下,您只需將外鍵添加到連接表中即可完成。但你也可以添加其他列:

t.integer :contact_id 
t.integer :campaign_id 
t.date :start_date 
t.status :string # 'active','stopped' 

現在,您可以指定屬性的關係:

campaign1 = Campaign.find(1) 
campaign2 = Campaign.find(2) 
contactA = Contact.find_by_name("A") 
contactA.campaign_contacts.build(:status=>'active', 
    :start_date => '2011-04-04',:campaign=>campaign1) 
contactA.campaign_contacts.build(:status=>'stopped', 
    :start_date => '2011-03-02',:campaign=>campaign1) 
+0

所以我創建數據庫campaign_contacts新的遷移? – Angela 2011-06-18 22:27:02

+0

我會用ruby腳本來做到這一點/生成遷移add_columns_to_campaign_contacts? – Angela 2011-06-18 22:27:39

+0

像這樣:'script/generate model CampaignContact contact:references campaign:references' – zetetic 2011-06-19 00:45:43

相關問題