【问题标题】:How do I show attributes for has_many associations in Rails 3?如何在 Rails 3 中显示 has_many 关联的属性?
【发布时间】:2023-03-26 11:09:01
【问题描述】:

我有一个有_many活动的联系人。

而一个活动有_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

谢谢。

【问题讨论】:

    标签: ruby-on-rails associations has-many


    【解决方案1】:

    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 创建一个新的迁移?
    • 我会使用 ruby​​ 脚本/生成迁移 add_columns_to_campaign_contacts 吗?
    • 像这样:script/generate model CampaignContact contact:references campaign:references
    • @zetetic -- 我明白了,所以表不存在,我创建它,然后将 has_many 的所有内容更改为 :through relationshipihp?
    • @zetitic -- 如果我想知道活动的状态,可以使用campaign.campaign_contacts.status?
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多