Ich versuche, eine Tabelle zu erstellen, sowohl die Lage und Kategorie eine bestimmte Kampagne mit den folgenden Modellverbänden festgelegt wurde, um zu handhaben:Datenmodellierung 3-Wege-Tabelle has_many Verein
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
Beim Versuch, eine Kampagne zu erstellen zum Auswählen von zwei verschiedenen Städten und Kategorien ist das Ergebnis NULL für die ID eines der Paramter wie:
Erstellungscode Kampagne:
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
AKTUALISIERT Die Ansicht, die Kampagne erstellen verwendet zwei getrennte collection_select für Kategorie und Metro als:
<%= f.collection_select :category_ids, Category.all, :id, :display_category, {}, {multiple: true} %>
und
<%= 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
Gibt es eine bessere Möglichkeit, die Erstellung einer 3-Tabellen-Beziehung zu ermöglichen, während ich versuche? oder ein Weg, um die Category
und Metro
Modelle bei Auswahl zu verknüpfen, so dass die resultierende Tabelle so etwas wie unten auf der Kampagnenerstellung ist:
@AlexisRabagoCarvajal gibt es noch keine Antworten. Ich habe das ** UPDATED ** hinzugefügt, um weitere Erläuterungen zu ermöglichen. – Sauron
Ihre Einrichtung sieht für mich gut aus. Ich weiß, das ist ziemlich alt, aber was ist das Problem, das Sie über den obigen Code stellen? – eirikir
Können Sie etwas mehr erklären, was Sie erreichen möchten? Konkret scheint mir, dass Kategorien nur durch eine Kampagne mit Metros verbunden sind - ist das richtig? – Julie