2016-03-28 12 views
1

Meine ModelleRails erstellen Objekt has_many durch

class Collection < ActiveRecord::Base 
    has_many :outfits 
    has_many :products, through: :outfits 
end 

class Outfit < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :collection 
end 

class Product < ActiveRecord::Base 
    has_many :outfits 
    has_many :collections, through: :outfits 
end 

Ich mag Produkt in Sammlung Modell speichern

so eine Sammlung kann wenige Produkte in es

, wie ich es tun kann? Ich bin ein bisschen Kampf mit ihm

es so etwas wie dieses

p = Product.find_by_code('0339').id 

p.collections.create(product_id:p1) 

versucht haben, aber ich denke, ich bin falsch

+0

Können Sie die Beziehung, die Sie modellieren möchten, ausschreiben? Es würde es leichter verständlich machen. Zum Beispiel, haben Kollektionen viele Outfits und Outfits haben viele Produkte, aber Produkte haben nur ein Outfit? –

+0

@MatthewCliatt mein Hauptziel ist es, ein 'Produkt' in vielen' Sammlungen' zu haben – user

+0

Und welche Beziehung zu Outfits spielen dabei? –

Antwort

1

Wenn Sie durch eine through Sammlung sind Verkettungs Sie nicht brauchen auf die ID der Eltern verweisen, da dies bekannt ist.

Statt:

p = Product.find_by_code('0339').id # NOTE that you have an 'id' not an object here 
p.collections.create(product_id:p1) # you can't call an association on the id 

bauen die Assoziation zwischen zwei bestehenden Modellen (ich nehme an, Sie in Ihren Modellen andere Bereiche haben, ich bin mit name als Beispiel).

p = Product.find_by(code: '0339') 
c = Collection.find_by(name: 'Spring 2016 Clothing') 
o = Outfit.new(name: 'Spring 2016 Outfit', product: p, collection: c) 
o.save! 

Unter der Annahme, p und c existieren und o Annahme geht Validierung dann haben Sie jetzt einen assocaition zwischen einem Produkt und einer Sammlung ein neues Outfit als Join-Tabelle verwenden.

p.reload 
p.collections.count # => 1 

c.reload 
c.products.count # => 1 
+0

omg thx man @ GSP. aber warum muss ich neu laden? – user

+1

'reload' war wahrscheinlich nicht notwendig; In diesem Test habe ich nur sichergestellt, dass die "Outfit" -Instanz sofort in den neuen Abfragen berücksichtigt wird – GSP

Verwandte Themen