2013-02-14 55 views
17

मैं एक ही तालिका का संदर्भ देने वाले दो फ़ील्ड के साथ माइग्रेशन कैसे बना सकता हूं? मेरे पास टेबल ए और छवि है। एमेज 1_आईडी छवि का संदर्भ देगा, और एमेज 2_आईडी छवि को संदर्भित करेगा। केवल 2 छवियां हैं, बहुत से नहीं। अगर मैंमैं एक ही मॉडल में एक ही मॉडल में एकाधिक संदर्भों के साथ माइग्रेशन कैसे जोड़ूं? रूबी/रेल

class AddFields < ActiveRecord::Migration 
    def change 
    change_table(:ticket) do |t| 
     t.references :image1_id 
     t.references :image2_id 
    end 
    end 
end 

का उपयोग मुझे नहीं लगता कि क्योंकि यह अंत करने के लिए एक और _ id जोड़ देगा और शायद 'छवि' मॉडल का उपयोग करने को पता नहीं चलेगा काम करेंगे है। मैंने

change_table(:ticket) do |t| 
    t.references :image 

पर विचार किया लेकिन फिर मैं उनमें से दो को कैसे जोड़ूं? मैं भी

create_table :images do |t| 
    t.belongs_to :ticket 
    t.string :file 

जोड़ने के बारे में सोचा था लेकिन मैं केवल 2, कई नहीं चाहते हैं, और इस टिकट से छवि के लिए हो रही, ticket.image1 या ticket.image2 तरह अनुमति देने के लिए प्रकट नहीं होता।

इस प्रलेखन के अनुसार http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table जो मुझे मिल सकता है, t.references कोई भी तर्क लेने के लिए प्रतीत नहीं होता है।

change_table(:suppliers) do |t| 
    t.references :company 
end 
+0

मुझे लगता है कि अब मैं सिर्फ एक संबंध बनाउंगा और 2 रिकॉर्ड्स के संबंध को सीमित करने के लिए 'pre_save' फ़िल्टर या' मान्य: my_validation' रखूंगा। – Chloe

उत्तर

28

आप अपने माइग्रेशन में add_column विधि के साथ बस यह करने के लिए और अपनी कक्षाओं में उचित संघों की स्थापना कर सकते हैं:

class AddFields < ActiveRecord::Migration 
    def change 
    add_column :tickets, :image_1_id, :integer 
    add_column :tickets, :image_2_id, :integer 
    end 
end 

class Ticket < ActiveRecord::Base 
    belongs_to :image_1, :class_name => "Image" 
    belongs_to :image_2, :class_name => "Image" 
end 

class Image < ActiveRecord::Base 
    has_many :primary_tickets, :class_name => "Ticket", :foreign_key => "image_1_id" 
    has_many :secondary_tickets, :class_name => "Ticket", :foreign_key => "image_2_id" 
end 

इस ब्लॉग पोस्ट, Creating Multiple Associations with the Same Table, और अधिक विस्तार में चला जाता है।

+3

दाएं, 't.references: x'' t.column: x_id,: integer' या 't.integer: x_id' के लिए सिर्फ लघुरूप है। –

+0

तो मुझे 'ticket.image1' का उपयोग करने में सक्षम होने के लिए t.references की आवश्यकता नहीं है? – Chloe

+0

@muistooshort की तरह कहा, यह एक सुविधा विधि है। आपका एक विशेष मामला है जहां एक अलग सहायक विधि का उपयोग करना शायद बेहतर है। – rossta