2012-07-18 10 views
6

क्या t.references का उपयोग करने और SQL कमांड के बीच products और category तालिका के बीच विदेशी कुंजी संबंध बनाने के लिए कोई अंतर है? दूसरे शब्दों में, क्या वही काम करने के दो अलग-अलग तरीके हैं या क्या मुझे यहां कुछ याद आ रही है?रेलों में विदेशी कुंजी बाधा और संदर्भों के बीच अंतर

class ExampleMigration < ActiveRecord::Migration 
    def up 
    create_table :products do |t| 
     t.references :category 
    end 
    #add a foreign key 
    execute <<-SQL 
     ALTER TABLE products 
     ADD CONSTRAINT fk_products_categories 
     FOREIGN KEY (category_id) 
     REFERENCES categories(id) 
    SQL 
    add_column :users, :home_page_url, :string 
    rename_column :users, :email, :email_address 
    end 

    def down 
    rename_column :users, :email_address, :email 
    remove_column :users, :home_page_url 
    execute <<-SQL 
     ALTER TABLE products 
     DROP FOREIGN KEY fk_products_categories 
    SQL 
    drop_table :products 
    end 
end 

उत्तर

0

मुझे इस पृष्ठ में कुछ चीज मिल रही है।

http://railsforum.com/viewtopic.php?id=17318

एक टिप्पणी से:

रेल विदेशी कुंजी का उपयोग नहीं करता है उसके बैकएंड कार्य करने के लिए। यह क्योंकि कुछ डीबी एसक्लाइट की तरह विदेशी टेबल को अपनी टेबल पर अनुमति नहीं देता है। तो रेल एक विदेशी कुंजी

इसके अलावा डेटाबेस तालिका के लिए विदेशी कुंजी जोड़ने के लिए एक मणि foreigner है निर्माण करने के लिए एक सहायक प्रदान नहीं करता है। What creates the FOREIGN KEY constraint in Ruby on Rails 3?

+3

रेल 4.2 अब उन एडाप्टर के लिए विदेशी कुंजी बाधाओं का समर्थन करता है जो उनका समर्थन करते हैं: http://edgeguides.rubyonrails.org/4_2_release_notes.html#foreign-key-support –

2

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

add_index :products, :category_id 

अद्यतन:

रेल 5 वास्तव में अब बिल्कुल वही बात करता है। तो, मूल प्रश्न का उत्तर देने के लिए: आजकल, दोनों एक जैसे हैं।

+0

तो रेलों में संदर्भ अनिवार्य रूप से विदेशी_की + उस विदेशी कुंजी पर सूचकांक हैं? – geoboy

+0

@geoboy यह वास्तव में हाल के संस्करणों में बदल गया है। 't.references' एक इंडेक्स के साथ एक विदेशी कुंजी भी सेट करता है। http://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference –

+0

यही मुझे लगा। लेकिन अगर मैं विदेशी कुंजी और इंडेक्स को अलग से स्थापित करता हूं, तो इसका वही प्रभाव पड़ता है? या 'schema.db' फ़ाइल में' t.references' होने का कोई फायदा है ('विदेशी_की' और' अनुक्रमणिका' के बजाय)? – geoboy

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