2012-04-02 8 views
5

को देखते हुए दो वर्गों, एप्पल और ऑरेंज एक रेल प्रवास में विदेशी कुंजी को परिभाषित करने के बीच का अंतर है:क्या t.integer और t.reference का उपयोग कर

def class Apple < ActiveRecord::Base 
    has_and_belongs_to_many :oranges 
end 

def class Orange < ActiveRecord::Base 
    has_and_belongs_to_many :apples 
end 

क्या t.integer का उपयोग कर विदेशी को परिभाषित करने के बीच क्या अंतर है में शामिल होने तालिका में कुंजियाँ:

create_table :apples_oranges, :id => false do |t| 
    t.integer :apple_id 
    t.integer :orange_id 
end 

और शामिल होने तालिका में विदेशी कुंजी को परिभाषित करने के t.references का उपयोग कर:

create_table :apples_oranges, :id => false do |t| 
    t.references :apple 
    t.references :orange 
end 

मैंने दोनों को देखा है और वे एक दूसरे के रूप में दिखाई देते हैं। बस यह सुनिश्चित करना चाहता था कि कुछ सूक्ष्मता/जादू नहीं है जो मुझे याद आ रही है।

ओह, और मैं ऑन रेल्स 3.2 w कर रहा हूँ/MySQL

उत्तर

8

http://guides.rubyonrails.org/migrations.html#special-helpers

कोई जादू, दर असल। माइग्रेशन को अधिक पठनीय, अधिक रेलवे बनाता है, यदि आप करेंगे, और यदि आप पॉलिमॉर्फिज्म का उपयोग कर रहे हैं, तो प्रकार कॉलम भी जोड़ता है। तो, या तो, लेकिन संदर्भ बेहतर है, सिर्फ इसलिए कि यह है।

+0

उत्कृष्ट, धन्यवाद! – plainjimbo

+4

आप 't.reongs_to' का उपयोग' t.references' के पर्याय के रूप में भी कर सकते हैं, जो माइग्रेशन को पढ़ने वाले किसी भी व्यक्ति के लिए एसोसिएशन को और भी स्पष्ट बनाता है। – MrTheWalrus

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