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 

किसी अभियान बनाने के प्रयास

enter image description here

अभियान निर्माण कोड:

012 दो अलग-अलग शहरों और श्रेणियों का चयन करने के लिए परिणाम के रूप में दिए गए पैरामीटर में से एक की पहचान के लिए शून्य है
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 टेबल संबंध बनाने के लिए अनुमति देने का एक बेहतर तरीका है? या चयन पर Category और Metro मॉडल से जोड़ने के लिए इतना है कि उसके एवज में नीचे दी गई तालिका की तरह कुछ अभियान निर्माण पर है एक तरह से:

enter image description here

+0

@AlexisRabagoCarvajal अभी तक कोई जवाब नहीं है। मैंने अधिक स्पष्टीकरण – Sauron

+0

के लिए अनुमति देने के लिए ** अपडेट किया गया ** जोड़ा है आपका सेटअप मुझे ठीक लग रहा है। मुझे पता है कि यह पुराना है, लेकिन ऊपर दिए गए कोड के बारे में आप क्या समस्या पूछ रहे हैं? – eirikir

+0

क्या आप कुछ और समझा सकते हैं जो आप पूरा करने की कोशिश कर रहे हैं? विशेष रूप से, मुझे ऐसा लगता है कि श्रेणियां केवल एक अभियान द्वारा महानगर से संबंधित हैं - क्या यह सही है? – Julie

उत्तर

0

मुझे लगता है कि समस्या बहु का चयन आप श्रेणियों पर है कि हो सकता है और महानगरों। आप अनिवार्य रूप से एक ही पंक्ति रिकॉर्ड में एक ही संदर्भ के लिए एकाधिक विदेशी_की फिट करने की कोशिश कर रहे हैं। यदि श्रेणी आईडी और मेट्रो आईडी दोनों को पूर्णांक के रूप में परिभाषित किया गया है, तो इसे सहेजने में सक्षम होने के लिए आपको एकाधिक रिकॉर्ड बनाना होगा।

आपको यह देखने के लिए कुछ तर्क जोड़ना होगा कि आपके चयन पैराम्स की लंबाई 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 

कुछ ऐसा दिखाई देगा यह अनिवार्य रूप से होगा पाश।

संबंधित मुद्दे