2012-12-26 12 views
7

के बीच सहयोग बनाएं मैं दो मॉडल हैदो instancied वस्तुओं

class Product < ActiveRecord::Base 
    attr_accessible :img, :name, :price, :quantity 
    belongs_to :album 
end 

2) "रेल कंसोल" का उपयोग करके, मैं कैसे कर सकता हूं एस संघों (इसलिए मैं "<% = product.first.album.name%>" का उपयोग कर सकता हूं?)?

उदा।

a = Album.create(:name => "My Album") 
p = Product.create(:name => "Shampoo X") 
# what's next? how can i set the album and the product together? 

उत्तर

10

आप इस तरह कर सकते हैं:

a = Album.create(name: "My Album") 

p = Product.create(name: "Shampoo X") 
# OR 
p = Product.create(name: "Shampoo X", album_id: a.id) 
# OR 
p.album = a 
# OR 
p.album_id = a.id 
# OR 
a.products << a 
# finish with a save of the object: 
p.save 

आप विशेषता उत्पाद मॉडल (इस बारे में सुनिश्चित नहीं) पर album_id के लिए सुलभ बनाना पड़ सकता है।

@bdares की टिप्पणी भी देखें।

+1

आप सुलभ करने के लिए '_id' जोड़ने, तो आप सिर्फ आईडी मान छड़ी कर सकते हैं के रूप में आप यह दृष्टांत:' Product.create (नाम: 'शैम्पू', album_id: a.id) ' – bdares

+0

@bdares _id जोड़ने के लिए, मुझे बस 'attr_accessible: img,: name,: price,: मात्रा,: _id', सही उपयोग करना होगा? हालांकि, यह मुझे यह त्रुटि देता है, 'ActiveModel :: MassAssignmentSecurity :: त्रुटि: संरक्षित विशेषताओं को बड़े पैमाने पर असाइन नहीं कर सकता: album_id' –

+0

@MrYoshiji,' p.album = a' के लिए, यह अस्थायी रूप से काम करता है, लेकिन अगर मैं फिर से खोलता हूं कंसोल, पी। एल्बम "शून्य" में बदल जाता है। 'P.album_id = a.id' के लिए, यह यह त्रुटि देता है, 'NoMethodError: अपरिभाषित विधि' album_id = ''। 'A.products << p' के लिए, यह यह त्रुटि देता है,' RuntimeError: जमे हुए हैश को संशोधित नहीं कर सकता '। क्या मुझे दोनों मॉडलों को पुन: उत्पन्न करने की ज़रूरत है? आप सभी को धन्यवाद! –

2

संबद्धता जोड़ें जब आप उत्पाद बनाने के लिए:

a = Album.create(:name => "My Album") 
p = Product.create(:name => "Shampoo X", :album => a) 
+0

यह अस्थायी रूप से काम करता है। हालांकि, अगर मैं कंसोल को फिर से खोलता हूं, तो पी.एल्बम "शून्य" में बदल जाता है .. –

+0

क्या आप पहली बार बनाई गई 'उत्पाद' को ला रहे हैं? उपर्युक्त कोड आज़माएं, फिर कंसोल को फिर से खोलें और 'product.find_by_name (' शैम्पू एक्स ') आज़माएं। –

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