5

我試圖建立一個表來同時處理一個特定的廣告系列已被設置爲以下模型協會的位置和類別:數據建模3路表的has_many協會

class Campaign < ActiveRecord::Base 

    has_many :campaign_category_metro_bids, dependent: :destroy 
    has_many :metros,  through: :campaign_category_metro_bids 
    has_many :categories, through: :campaign_category_metro_bids 

end 

class Metro < ActiveRecord::Base 

    has_many :campaign_category_metro_bids 
    has_many :campaigns, through: :campaign_category_metro_bids 
    has_many :categories, through: :campaign_category_metro_bids 

end 

class Category < ActiveRecord::Base 

    has_many :campaign_category_metro_bids 
    has_many :campaigns, through: :campaign_category_metro_bids 
    has_many :metros,  through: :campaign_category_metro_bids 

end 

class CampaignCategoryMetroBid < ActiveRecord::Base 
    belongs_to :campaign 
    belongs_to :category 
    belongs_to :metro 
end 

當試圖建立廣告活動選擇兩個不同的城市和分類結果爲NULL的paramters之一當ID:

enter image description here

建立廣告活動代號:

def new 
    if signed_in? 
     # create new campaign 
     @user = User.find(params[:id]) 
     @campaign = @user.campaigns.new 
    else 
     redirect_to signin_path 
    end 
end 

def create 
    @campaign = User.find(params["campaign"]["user_id"]).campaigns.build(campaign_params) 

    if @campaign.save 
     flash[:success] = "Campaign created!" 
     redirect_to current_user 
    else 
     render 'new' 
    end 
end 

修訂 視圖創建活動採用兩個獨立collection_select類別和地鐵爲:

 <%= f.collection_select :category_ids, Category.all, :id, :display_category, {}, {multiple: true} %> 

<%= f.collection_select :metro_ids, Metro.all, :id, :full_name, {}, {multiple: true} %> 

campaigns_params:

def campaign_params 
     params.require(:campaign).permit(:name, :campaign_category_metro_bid_id, 
             :metro_ids => [], :category_ids => []) 
    end 

有沒有更好的方法來允許我嘗試創建3個表關係? 或方式,使產生的表像之下在建立廣告活動的CategoryMetro機型在選擇鏈接:

enter image description here

+0

@AlexisRabagoCarvajal還沒有任何解答。我添加了** UPDATED **以允許更多的說明 – Sauron 2014-12-03 21:57:42

+0

您的設置對我來說看起來很好。我知道這是相當古老的,但是你對上面的代碼有什麼問題? – eirikir 2015-07-29 21:42:41

+0

你能解釋一下你試圖完成什麼嗎?具體來說,在我看來,類別只是通過競選與地鐵有關 - 這是否正確? – Julie 2015-07-30 14:17:35

回答

0

我想問題可能是多選擇,你有類別和地鐵。你基本上試圖將多個foreign_keys作爲同一個引用放入單行記錄。如果類別ID和城市ID都定義爲整數,則需要創建多個記錄才能保存此記錄。

您需要添加一些邏輯來查看您的選擇參數長度是否大於1,並且基於此您需要創建並保存一個新行。邏輯看起來像這樣

params[:category_ids].each do |category| 
    params[:metro_ids].each do |metro| 
    @user.campaign.create(category_id: category, metro_id:metro) #any other params would go here too 
    end 
end 

這將基本上循環通過您的多選創建每個組合的新記錄。