ठीक है, मुझे विश्वास है कि मैंने आखिरकार इसका पता लगा लिया।
"चूंकि आईडी मान MySQL द्वारा बनाया जा रहा है, मैं रूबी में आईडी फ़ील्ड को सेट/बनाना/बनाए रखना चाहता हूं ताकि puts dog.id
खाली स्ट्रिंग नहीं होगी।"
=> क्योंकि id मान स्वचालित रूप से MySQL में असाइन किया गया है रूबी के पास यह जानने का कोई तरीका नहीं है कि वह आईडी मान क्या है और इसलिए dog.id को कॉल करने से एक खाली स्ट्रिंग वापस आ जाएगी।
=> मुझे रूबी में किसी ऑब्जेक्ट के आईडी मान को मैप करने का एक तरीका खोजने की आवश्यकता है जैसे कि यह वही है जो आईडी को स्वचालित रूप से ऑब्जेक्ट को असाइन किया जाता है जब मैं इसे MySQL डेटाबेस में सम्मिलित करता हूं।
=> टेबल डॉग बनाने के लिए प्रयुक्त कथन पर ध्यान दें:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
यह प्रत्येक कुत्ते के लिए अनुवाद करता है जिसमें एक आईडी (जो स्वचालित रूप से इसे असाइन की जाती है), एक नाम और एक रंग होता है। कुत्ते की वस्तुओं की जानकारी के भंडारण के बारे में सोचने के दो दृष्टिकोण हैं:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
मैं आम तौर पर जानकारी संग्रहीत करने के लिए सरणी का उपयोग करना पसंद करता हूं लेकिन इस बार मैंने हैश का उपयोग किया है (क्योंकि जब मैं कुत्ते पर निरीक्षण करता हूं (कुत्ता नहीं) तो परिणाम कुछ ऐसा होता है:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
जो मुझे हैश डेटा संरचना के बारे में सोचता है:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
रूबी में, मैं यह करता हूं:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
जहां हैश_रो उस पंक्ति को संदर्भित करता है जिसमें प्रत्येक कुत्ते की वस्तु की विशेषता होती है। यह मूल रूप से रूबी को यह जानने देता है कि हर बार जब वह डॉग क्लास के एक नए उदाहरण को इंस्टेंट करता है तो उसे उस इंस्टेंटेशन में टैप करना चाहिए और हैश [आईडी] को "आईडी" पर मैप करना चाहिए।
ऐसा करने से मुझे रूबी में "आईडी" के मान तक पहुंचने की अनुमति मिलती है।
पीएस:यह अभी मेरे साथ हुआ है। थोड़ी देर के लिए घूमने के बाद शायद मैं इस जवाब को संपादित कर दूंगा।