2017-12-18 9 views
0

Ich habe zwei Modelle 'Produkt' und 'Variant', Produkt hat viele Varianten, jetzt muss ich die Assoziation eines neuen Modells namens "Ingridient" mit Variante so festlegen, dass Variant viele hat ingridients.but in ingridents möchte ich zeigen, dass es wieder has_one Produkt und variant.for BeispielAssoziation mit dem gleichen Modell

class Variant 
    has_many :ingridients 
    belongs_to :product 
end 

class Ingridient 
belongs_to :variant 
belongs_to :product 
end 

jetzt in meinem ingrident Modell auch has_one Variante und has_one Produkt zur gleichen time.how sollte ich meine Assoziationen möchte ich gesetzt .Ich kenne mehrere Assoziationen mit der gleichen Tabelle, aber nicht wissen, wie Sie es in meiner App implementieren.Ich benutze Mongoid als meine Datenbank.

Edit: Eigentlich in meinem Fluss Benutzer kann ein Produkt mit vielen Varianten erstellen und dann jede Variante kann mehrere ingridients.In, dass jedes ingrident ich Auswahlbox für die Auswahl von Produkten und Varianten Datenbank .means ingridients wird ein Produkt ein Variante, Quantität usw. Felder. Um es klarer zu machen, mache ich ein Rezept .

+0

Warum brauchen Sie 'has_one'? Sie können auf dieselbe Variante zugreifen, indem Sie 'self.variant' von innerhalb von 'Ingredient' aufrufen. Wie sind beide verschieden? –

+0

tatsächlich in meinem Datenfluss, ich ein Produkt mit mehreren Varianten erstellen, dann habe ich mehrere ingridients für jede varients.and in ingridients Ich habe ein Auswahlfeld, um product_name und variant_name wieder von datenbank.so jedes ingridient soll ein Produkt und eine Variante. –

+0

Und das kann man nicht mit 'gehört'? –

Antwort

0

Ich bin nicht 100% klar, was Sie tun möchten.

Aber wie es aussieht ist, dass Sie eine Assoziation mit einem anderen Namen haben möchten.

class Variant 
    has_many :ingridients, :foreign_key => 'FieldName', :class_name => 'CassName' 
    belongs_to :product, :foreign_key => 'FieldName', :class_name => "CassName" 
end 

class Ingridient 
belongs_to :variant, :foreign_key => 'FieldName', :class_name => "CassName" 
belongs_to :product, :foreign_key => 'FieldName', :class_name => "CassName" 
end 

Ich hoffe, dass dies hilft

+0

Ja deine Antwort ist sehr nah an dem, was ich will.aber kann ich wie Variante haben has_many: ingridents und gleichzeitig ingrident gehört_to: variant und auch gehört_to: variant, forign_key => 'Feldname',: class_name => "Classname" ? –

Verwandte Themen