2010-06-21 12 views
6

मैं एक मॉडल 'रिलेशन' बनाना चाहता हूं जो ActiveRecord :: Base को बढ़ाता है, इसे तालिका का नाम 'question_tags' के रूप में सेट करें, और प्राथमिक कुंजी के बिना। मुझे क्या करना चाहिए?रेल में प्राथमिक कुंजी के बिना मॉडल कैसे बनाएं

class Relation < ActiveRecord::Base 
    set_table_name 'questions_tags' # set table name, right? 

    # how to define 'no-pk'? 

end 

अद्यतन


हाय, दोस्तों। मुझे पता है कि 'create_table' का उपयोग इस समस्या को हल कर सकता है, लेकिन यह वही है जो मैं जानना चाहता हूं: create_table(:id=>false) के पीछे जादू क्या है? create_table(:id=>false) का उपयोग किए बिना मैं वही प्रभाव कैसे प्राप्त कर सकता हूं?

+1

मेरे हिसाब से कोई जादू नहीं है। 'create_table' का एक अतिरिक्त विकल्प है, चाहे' id'-column बनाया जाना चाहिए या नहीं। बस इतना ही। जब आप "जादू" के लिए पूछ रहे हैं: क्या आपका मतलब कोड, एसक्यूएल-स्टेटमेंट जेनरेट किया गया है, या कुछ और ...? – nathanvda

+1

यदि आप जानना चाहते हैं कि दृश्यों के पीछे क्या चल रहा है, तो मैं रेल एपीआई दस्तावेज में डिपर को खोदने का सुझाव दूंगा: http://api.rubyonrails.org/classes/ActiveRecord/Base.html, http: // api .rubyonrails.org/कक्षाएं/ActiveRecord/Migration.html, http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – auralbee

+0

@ nathanvda, auralbee: दोनों धन्यवाद। मैं रेल के लिए नया हूं, शायद मुझे ActiveRecord के बारे में अधिक लेख पढ़ने की जरूरत है। – Freewind

उत्तर

8

एक प्रवास ऐसी दिखने बनाएँ:

class CreateQuestionsTags < ActiveRecord::Migration 

    def self.up 
    create_table :questions_tags, {:id => false, :force => true} do |t| 
    ... 
    t.timestamps 
    end 
    end 

    def self.down 
    drop_table :questions_tags 
    end 

end 
+0

आपके उत्तर के लिए धन्यवाद। कृपया मेरा अद्यतन प्रश्न देखें – Freewind

1

यदि आप एक पिवट तालिका बनाने की सोच रहे हैं, जैसा कि यह तालिका के नाम से दिखता है, तो एआर पृष्ठभूमि में इसे संभालेगा।

हालांकि, अगर आप अधिक feilds तो साथ एक तालिका बनाने के लिए देख रहे हैं: 1) अपनी मेज नाम बदलने के लिए "realtions" कृपया 2) एक प्राथमिक कुंजी "आईडी"

का उपयोग कोई अच्छा कारण नहीं है किसी तालिका में प्राथमिक कुंजी का उपयोग करने के लिए, और यह बहुत संभावना है कि आप इसे बाद में पछतावा कर सकते हैं।

+0

धन्यवाद। कृपया मेरा अद्यतन प्रश्न देखें, मैं सिर्फ यह जानना चाहता हूं कि पीछे क्या हुआ था। – Freewind

-7

आप पीके क्यों नहीं चाहते हैं?

सक्रिय रिकॉर्ड एक पीके की अपेक्षा करता है, और मुझे नहीं लगता कि यह क्या नुकसान पहुंचा सकता है।

+0

धन्यवाद। चूंकि यह एक जॉइन टेबल है, इसलिए मैं नहीं चाहता कि उसके पास पीके – Freewind

+3

है यदि आप विरासत डीबी मैपिंग बना रहे हैं, तो यह ठीक है, लेकिन ActiveRecord पैटर्न/डिज़ाइन में टेबल में प्राथमिक कुंजी हैं। यह एक सम्मेलन है कि आप या तो अपने जीवन को आसान बनाने, या लगातार लड़ने के लिए अनुसरण कर सकते हैं। – nessur

+3

कई बार आप प्राथमिक कुंजी नहीं चाहते हैं। रिपोर्टिंग टेबल पर जहां आप गैर-प्राथमिक-कुंजी कॉलम के आधार पर कई आवेषण और पढ़ते हैं, तो आप जितना संभव हो उतने इंडेक्स चाहते हैं। प्राथमिक कुंजी कॉलम रखने के लिए आप उपयोग नहीं करेंगे, धीमे आवेषण के अलावा कुछ भी नहीं है। – WattsInABox

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