2012-01-05 22 views
20

belongs_to मैं 2 मॉडलरेल मॉडल has_many, संबंधों

class User < ActiveRecord::Base 
    has_many :products 
end 

class Product < ActiveRecord::Base 
    belongs_to :user 
end 

है मैं उत्पाद तालिका में एक कॉलम user_id जोड़ने की जरूरत है या रेल यह डिफ़ॉल्ट रूप से जोड़ता है है?

उत्तर

47

आपको user_id कॉलम को मैन्युअल रूप से Product मॉडल में जोड़ने की आवश्यकता है। यदि आपने अभी तक अपना मॉडल नहीं बनाया है, तो मॉडल जनरेटर में कॉलम सूची में संदर्भ जोड़ें।

rails generate model Product name:string price:decimal user:references

या, अपने Product मॉडल पहले से ही मौजूद है, तो आपको क्या करना है क्या है: उदाहरण के लिए:

rails g migration addUserIdToProducts user_id:integer

कि उस माइग्रेशन को ठीक से products को user_id स्तंभ जोड़ने के उत्पन्न होगा तालिका। कॉलम के साथ सही ढंग से नामित (user_id) के साथ, रेल को पता चलेगा कि यह आपकी विदेशी कुंजी है।

+0

हे, मैं 'पोस्टग्रेस्क्ल' का उपयोग कर रहा हूं और मैंने आपके द्वारा वर्णित पहली विधि का उपयोग करके मॉडल निर्माण किया है। 'उपयोगकर्ता: संदर्भ 'का उपयोग कर। अब जब मैं 'उपयोगकर्ता' मॉडल ऑब्जेक्ट को हटाने का प्रयास करता हूं तो यह मुझे 'पीजी :: विदेशीके उल्लंघन:' त्रुटि देता है। मेरी उम्मीद है कि उपयोगकर्ता को हटाए जाने पर 'उपयोगकर्ता' के तहत सभी 'उत्पादों' को हटा दिया जाना चाहिए। पीएस: मेरे पास 'belong_to: उपयोगकर्ता, आश्रित है:: मेरे' उत्पाद' मॉडल में नष्ट करें। मैं रेल में एक नौसिखिया हूँ :) –

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