Как мне показать атрибуты для ассоциаций has_many в Rails 3? - PullRequest
2 голосов
/ 17 июня 2011

У меня есть контакт, у которого есть Кампании has_many.

И у Кампании есть контакты_мани.

Однако у контакта может быть дата начала и статус для каждой Кампании.

Например:

 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

Спасибо.

1 Ответ

5 голосов
/ 17 июня 2011

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)
...