2011-01-19 11 views
5

मेरे पास एक डेटाबेस है जो यूयूआईडी को प्राथमिक कुंजी के रूप में उपयोग करता है, जैसे:रेल: क्या मैं गैर-पूर्णांक प्राथमिक कुंजी वाले पॉलीमोर्फिक संदर्भों का उपयोग कर सकता हूं?

create_table "my_table", :id => false, :force => true do |t| 
t.string "id", :limit => 36 
end 

हालांकि, जब मैं उपयोग करने का प्रयास करता हूं: उस तालिका में विदेशी कुंजी के संदर्भ, यह आईडी के लिए पूर्णांक कॉलम उत्पन्न करता है। क्या: एक गैर-पूर्णांक आईडी से निपटने के लिए संदर्भ निर्देश दिए जाएंगे? रेफरिंग टेबल के लिए मेरा माइग्रेशन इस तरह है:

create_table "child_table" :id => false, :force => true do |t| 
t.string "id", :limit => 36 
t.references :my_table 
end 

मुझे पता है कि मैं मैन्युअल रूप से :my_table_id और :my_table_type कॉलम बना सकता हूं, लेकिन मुझे आश्चर्य है कि :references इन परिस्थितियों में अपने जादू को करने के लिए बनाया जा सकता है ताकि मैं मेरे कोड में स्पष्ट रूप से आईडी + प्रकार को संभालने की ज़रूरत नहीं है।

उत्तर

3

नोप, references केवल इस लेखन के रूप में पूर्णांक कॉलम बनाता है।

मुझे यकीन है कि आप जो चाहते हैं उसे करने के लिए references विधि को ओवरराइड कर सकते हैं। लेकिन आईएमओ आप अपने यूयूआईडी कॉलम निर्दिष्ट करने और स्पष्ट रूप से कॉलम टाइप करने से बेहतर होंगे। इस तरह कोड स्पष्ट है कि दृश्यों के पीछे क्या चल रहा है।

+0

हाँ, मैं सिर्फ ActiveRecord स्रोत देख लिया है और आईडी को पूर्णांक होने के लिए यह हार्डकोड किया गया है। – kdt

15

एक: जब रेल 4,2

t.references :car, type: :uuid, index: true 

उदाहरण के लिए के बाद से संदर्भित प्रकार विकल्प जोड़ा गया है:

def change 
    enable_extension 'uuid-ossp' 
    create_table :cars, id: :uuid do |t| 
    t.integer :seats 
    # And other car-specific things 
    end 
    create_table :wheels do |t| 
    t.references :car, type: :uuid, index: true 
    t.integer :radius 
    # And other wheel-specific things 
    end 
end 

स्रोत: https://github.com/rails/rails/pull/16231

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