2012-12-21 26 views
14

मैं मॉडल बनाने के प्रक्रिया में गिट-बैश के माध्यम से उदाहरण वर्चर (20), आयु वर्कर (6) के लिए रेल में वर्कर के आकार को परिभाषित करना चाहता हूं।रेल में MySQL के लिए वर्कर की लंबाई को परिभाषित करें

मैंने स्टैक पर खोज की लेकिन मुझे कोई जवाब नहीं मिला।

उत्तर

30

column विधि के लिए प्रलेखित कॉलम बनाने के दौरान कई विकल्प हैं। बाद में संशोधनों के दौरान वे add_column पर भी लागू होते हैं।

एक और अधिक सीमित स्तंभ बनाने के लिए सबसे संक्षिप्त तरीका है:

t.string :name, :limit => 20 
t.string :age, :limit => 6 

एक नोट के रूप में, यह आपके डेटाबेस में इस तरह सीमा लागू करने का बेहद असामान्य है और एक बेहतर समाधान मॉडल validates के प्रयोग पर सीमित करने के लिए है । उदाहरण के लिए:

validates :name, 
    :presence => true, 
    :length => { :maximum => 20 } 

MySQL मान बताए बिना बहुत लंबे हैं काटना, इसलिए नहीं होने लंबाई सीमा अंत में, खो डेटा को बढ़ावा मिलेगा विशेष रूप से इस तरह के एक कम लंबाई के साथ की प्रवृत्ति है।

याद रखें कि डेटाबेस में VARCHAR कॉलम परिवर्तनीय लंबाई हैं, इसलिए बनाम VARCHAR(20) में दस वर्ण मान के लिए कोई संग्रहण लाभ नहीं है।

+0

एक सवाल कृपया .. हम मॉडल को उत्पन्न करते समय इस तरह के नाम 'वर्कर (20)' में कमांड लाइन के माध्यम से इसे परिभाषित क्यों नहीं करते हैं, मैं बस जानना चाहता था? .. कृपया एक अस्पष्ट सवाल के लिए बुरा मत मानो। –

+0

कमांड लाइन के माध्यम से मॉडलों को परिभाषित करना समर्थित है, लेकिन आप जो हासिल कर सकते हैं उसमें बहुत अधिक सीमित है। यह भी एक अनोखी विशेषता है और मुझे यकीन नहीं है कि ऐसा करने के लिए क्यों आवश्यक होगा। स्क्रिप्ट से अपनी पूरी तरह से अनुकूलित माइग्रेशन फ़ाइल को प्रस्तुत करने के लिए इसका उपयोग करने का क्या फायदा है? आम तौर पर मॉडल को इंडेक्स जोड़ने के लिए कम से कम कुछ संपादन की आवश्यकता होती है, उदाहरण के लिए, मामलों के सबसे मामूली सभी को छोड़कर। – tadman

+0

मेरे संदेहों को साफ़ करने के लिए धन्यवाद। –