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)
所以我創建數據庫campaign_contacts新的遷移? – Angela 2011-06-18 22:27:02
我會用ruby腳本來做到這一點/生成遷移add_columns_to_campaign_contacts? – Angela 2011-06-18 22:27:39
像這樣:'script/generate model CampaignContact contact:references campaign:references' – zetetic 2011-06-19 00:45:43