5

में पॉलीमोर्फिक के मौजूदा मौजूदा_मेनी रिलेशनशिप को बदलना मेरे पास दो मॉडलों के बीच मौजूदा है- कई संबंध - उन्हें 'कार' और 'यात्रियों' कहते हैं - कुछ सौ 'कार्ड' से कुछ हज़ार 'यात्रियों' के साथ मेरे उत्पादन पर्यावरण में। मैं एक और मॉडल जोड़ रहा हूं, इसे 'ट्रेन' कहता हूं, और मैं कारों और यात्रियों के बीच विद्यमान है_मैनी संबंध बदलना चाहता हूं जो प्रत्येक यात्री को कार या ट्रेन से संबंधित एक पॉलिमॉर्फिक में बदलना चाहता है।रेल 3 में

मेरा माइग्रेशन कैसा दिखना चाहिए? जब मैं माइग्रेट करता हूं, तो मैं अपने डेटाबेस में मौजूदा संबंधों को संरक्षित करना चाहता हूं, इसलिए मैं इसे एक कॉलम को दूसरे स्थान से बदलने के बजाए कुछ टेबल-नामकरण करना चाहता हूं। इसके अलावा, मैं सर्वर कंसोल खोलने और मैन्युअल रूप से सभी रिकॉर्ड्स को संपादित किए बिना इसे करने में सक्षम होना चाहता हूं, इसलिए जब मैं उत्पादन में अपने परिवर्तनों को दबाता हूं तो मैं बस पूरे डेटाबेस को माइग्रेट कर सकता हूं। कोई सुझाव?

टीएल; डीआर: मैं एक नए मॉडल के साथ एक पॉलीमोर्फिक में मौजूदा है_मैनी संबंध कैसे बदलूं?

+0

मुझे अभी एक ही चीज़ करना है लेकिन एक अनुरोध मॉडल के लिए। मैं अपने परिणाम – rpearce

+0

पोस्ट करूंगा, मैं नीचे दिए गए समाधान के साथ जा रहा हूं। घर्षण – rpearce

उत्तर

23

आप

  1. जैसे कुछ माइग्रेशन लिखने के लिए यात्री मेज पर दो कॉलम जोड़े होगा। -> रेल ग्राम प्रवास change_column_in_passenger

  2. प्रवास फ़ाइल में में कोड को विधि निम्नलिखित लिखने

कोड:

def up 
    rename_column :passengers, :car_id, :transport_id 
    add_column :passengers, :transport_type, :string 
    Passenger.reset_column_information 
    Passenger.update_all(:transport_type => "Car") 
end 

def down 
    rename_column :passengers, :transport_id, :car_id 
    remove_column :passengers, :transport_type 
end 



इसलिए इस प्रवास सभी मौजूदा Car संबंध अद्यतन करेगा Passenger में। ट्रेन मॉडल को Passenger के साथ संबंध रखने की अनुमति भी देगा।

+2

add_index में फेंकने के बारे में: यात्रियों, [: transport_id,: transport_type]? – rpearce

+0

मैं @ अक्षय के सुझाव के साथ गया, जो काम करता प्रतीत होता है। Add_index वाक्यविन्यास क्या करता है? –

+0

इंडेक्सिंग बेहतर खोज में मदद करता है। add_index विशेष कॉलम पर mysql अनुक्रमण लागू करता है। –