2014-09-26 43 views
0

我試圖構建如展示的多級模型。當用戶創建一個活動時,他們將從表類別和地鐵中選擇一些類別和一些地鐵。然後這些選擇將作爲campaign_category和campaign_metro放在兩個表中。但是,在創建這些條目後,我希望能夠使用表campaign_category_metro中這些組合的排列填充另一個表,以便鏈接廣告系列,爲用戶選擇的類別和都市區設置出價。has_many通過產生交叉連接的結果

例如說一個用戶創建具有ID 10和ID爲1和2的選擇的類別的運動,並顯示已ID 3和4在表中campaign_category地鐵:

enter image description here

和在出現表campaign_metro:

enter image description here

在campagin_category_metro我想有從上面的表中的行置換:

enter image description here

然後用戶可以爲這些活動/地鐵組合設置出價。

截至目前,在創建廣告系列和選擇類別和地鐵時,我可以獲取表格campaign_category和campaign_metro,但最終的表格campaign_category_metro保持空白。下面是我的模型是:

第一層次:

class Campaign < ActiveRecord::Base 
    has_many :campaign_metros, dependent: :destroy 
    has_many :metros, through: :campaign_metros 

    has_many :campaign_categories, dependent: :destroy 
    has_many :categories, through: :campaign_categories 
end 

class Category < ActiveRecord::Base 
    has_many :campaign_categories, dependent: :destroy 
    has_many :campaigns, through: :campaign_categories 
end 

class Metro < ActiveRecord::Base 
    has_many :campaign_metros, dependent: :destroy 
    has_many :campaigns, through: :campaign_metros 
end 

二級(填充,而是關係到campaign_category_metro什麼都不做):

class CampaignCategory < ActiveRecord::Base 
    belongs_to :campaign 
    belongs_to :category 

    has_many :campaign_category_metros, dependent: :destroy 
    has_many :campaign_metros, through: :campaign_category_metros 
end 

class CampaignMetro < ActiveRecord::Base 
    belongs_to :campaign 
    belongs_to :metro 

    has_many :campaign_category_metros, dependent: :destroy 
    has_many :campaign_categories, through: :campaign_category_metros 
end 

第三級(什麼也不顯示在創建):

class CampaignCategoryMetro < ActiveRecord::Base 
    belongs_to :campaign_category 
    belongs_to :campaign_metro 
end 

我怎樣才能允許第三級表是po在創建廣告系列時使用表campaign_category和campaign_metro的交叉結果進行調整?

回答

1

我會考慮掛鉤函數:after_create或:after_initialize, 它設置交叉連接的結果。

class Campaign < ActiveRecord::Base 
    after_create :add_campaign_category_metros 

    def add_campaign_category_metros 
    campaign_categories = this.campaign_categories 
    campaign_metros = this.campaign_categories 

    campaign_categories.each do |cc| 
     campaign_metros.each do |cm| 
     ccm = CampaignCategoryMetro.new 
     ccm.campaign_category = cc 
     ccm.campaign_metro = cm 
     ccm.save 
     end 
    end 

    end 

不知道如何填寫出價,但這是關於我會嘗試。

+0

在創建條目後,用戶將填充出價。有了你的建議,模型之間的關係是否仍然有效? – Sauron 2014-09-26 13:39:16

+0

關係應該按照在模型中指定的方式工作。 您所做的只是在創建時創建CampaignCategoryMetro對象。 雖然允許更新可能會很難。我會檢查是否有任何其他可能性。 – jfornoff 2014-09-26 13:41:09

+0

對於這個表格,我一定會需要更新。是否有另一種模型佈局和關係可以實現相同的功能,但實現起來更簡單? – Sauron 2014-09-26 13:56:28