2013-08-12 10 views
9

मेरे पास पहले से ही एक अलग परियोजना से बनाए गए टेबल हैं। उनके नाम स्वरूपित हैं जैसे aaa_bbb_ccc_ddd (सभी गैर बहुवचन और कुछ भाग एक सम्मेलन शब्द नहीं हैं)। मैंने this पढ़कर डेटाबेस से स्कीमा सफलतापूर्वक बनाया है। लेकिन अब मुझे वास्तविक मॉडल बनाना है। मैंने RMRE पर देखा है, लेकिन वे मेरी टेबल पर ActiveRecord सम्मेलन को लागू करते हैं और उनके नाम बदलते हैं, जिन्हें मैं नहीं करना चाहता क्योंकि अन्य ऐप्स उन तालिकाओं पर निर्भर करते हैं।रेल: मौजूदा टेबल से मॉडल बनाना?

मौजूदा टेबल से स्वचालित रूप से मॉडल और स्कीमा बनाने का सबसे अच्छा तरीका क्या है?

उत्तर

16

सिर्फ एक सिद्धांत, यकीन है कि यह कैसे वास्तविक अनुप्रयोग में काम करेगा नहीं:

, बनाने models नामित के रूप में ActiveRecord सम्मेलन की आवश्यकता तालिका aaa_bbb_ccc_ddd के लिए उदाहरण के लिए यदि आप एक मॉडल AaaBbb पैदा हो जाएगी और इस मॉडल को मैप अपने तालिका:

class AaaBbb < ActiveRecord::Base 
    self.table_name = "aaa_bbb_ccc_ddd" 
end 

या एक अधिक मानव उदाहरण:

class AdminUser < ActiveRecord::Base 
    self.table_name = "my_wonderfull_admin_users" 
end 

अब आप जिसका अर्थ है आप की तरह एक यूआरएल होगा मार्गों में AaaBbb संसाधन के रूप में होगा:

.../aaa_bbb/... 

और मुझे लगता है कि आप यूआरएल में तालिका नाम नाम का उपयोग करना चाहते हैं तो आप मार्ग को फिर से लिखने सकता है:

get 'aaa_bbb_ccc_ddd/:id', "aaa_bbb#show", as: "aaa_bbb"

फिर से, केवल एक सिद्धांत जो आपकी मदद कर सकता है। मैंने अभी तक ऐसे मामलों के साथ काम नहीं किया है लेकिन इससे शुरू होगा।


संपादित

को डेटाबेस से मॉडल बनाने को स्वचालित:

https://github.com/bosko/rmre

लेकिन मुझे लगता है इस अजीब नाम आप होगा कि साथ रेल प्रथा के अनुसार मॉडल का निर्माण करेगा अपने ऐप में संसाधन के रूप में उपयोग करने के लिए।


है कि मैं पर पाया एक अच्छा टेम्पलेट अतः मामले में आप एक मॉडल का नाम तालिका नाम से अलग उपयोग करना चाहते हैं:

class YourIdealModelName < ActiveRecord::Base 
    self.table_name = `actual_table_name` 
    self.primary_key = `ID` 

    belongs_to :other_ideal_model, 
    :foreign_key => 'foreign_key_on_other_table' 

    has_many :some_other_ideal_models, 
    :foreign_key => 'foreign_key_on_this_table', 
    :primary_key => 'primary_key_on_other_table' 
end 
+1

क्या कोई schema.rb से इसे स्वचालित करने का कोई तरीका है? मेरे पास ~ 10 कॉलम के साथ ~ 20 टेबल हैं। यदि संभव हो तो हाथों से कोड और विशेषताओं को कोड नहीं करना चाहते हैं। – Derek

+0

आपको केवल टेबल के बारे में परवाह करना चाहिए और उनके कॉलम का उपयोग करना चाहिए। मुझे यकीन नहीं है कि आप इस डीबी के साथ काम करने वाले अन्य ऐप को प्रभावित किए बिना कॉलम को किसी भी तरह बदल सकते हैं। स्वचालित के बारे में मैं एक बाउट सोचूंगा .. अगर मुझे कुछ उपयोगी लगता है तो मेरा जवाब अपडेट होगा। – rmagnum2002

+0

ओह, मैं कॉलम नाम बदलने के बारे में सोच नहीं रहा था।यह अभी ठीक है क्योंकि मेरे पास एक मॉडल फ़ाइल भी नहीं है क्योंकि मैं पीछे की ओर काम कर रहा हूं। इसलिए मुझे 'attr_accessible' सामान सहित सबकुछ टाइप करना होगा, इसलिए मैं अपने लिए सभी मॉडल कोड स्वचालित रूप से उत्पन्न करना चाहता हूं। – Derek

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