2016-02-29 9 views
5

क्या रूबी या रेल डीएसएल स्ट्रिंग "mccdougal" से "McDougal" को प्रारूपित करेगा, और साथ ही स्ट्रिंग "McDougal" को छोड़ देगा?'मैकडौगल' जैसे 'मैकडौगल' जैसे तारों को सही ढंग से प्रारूपित करने के लिए कैसे करें

निम्नलिखित में titleize"McDougal" लिए परिणाम पासिंग:

"McDougal".titleize # => "Mc Dougal" 
+2

ऐसा करने का सही बात मिलेगा है: आप एक प्रारंभकर्ता में कोड के इस बिट ड्रॉप कर सकता है , और फिर इसे उलझन में नहीं। –

उत्तर

4

आप कुछ है कि सही ढंग से इस तरह एक नाम स्वरूपों को खोजने के लिए नहीं जा रहे हैं। इसका कारण यह है कि मैकडॉगल में एम और डी का पूंजीकरण एक मनमाना क्षेत्रीय चीज है। एकमात्र तरीका जिसे मैं ऐसा कुछ करने के बारे में सोच सकता हूं वह लुकअप टेबल के साथ है। मैं कहूंगा कि आपको प्रोग्रामेटिक रूप से सर्वश्रेष्ठ मिलेगा "mcdougal".capitalize => "मैकडौगल"। मैं तर्क दूंगा कि आप क्षेत्रीय पूंजीकरण का अनुमान नहीं लगा सकते हैं और नहीं करना चाहिए।

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

+0

मैं लगभग उसी जवाब टाइप करने के आधे रास्ते था, तुमने मुझे हराया :)। – sameera207

5

मेरे ज्ञान के लिए एक रेल सहायक नहीं है जो इस मामले को संभाल सकता है। यह एक गैर-मानक एज केस है जिसे विशेष हैंडलिंग की आवश्यकता है। हालांकि, आप एक कस्टम स्ट्रिंग inflection बना सकते हैं। उसके नाम फ़ॉर्मेट करने के लिए उपयोगकर्ता जिम्मेदार बनाने के लिए

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.human /mcdougal/, 'McDougal' 
end 

और फिर जब आप "mcdougal".humanize कहते हैं, आप "McDougal"

+0

http://pi.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html देखें कि यह कैसे काम करता है –

+1

इस के साथ एकमात्र समस्या ब्रह्मांड में प्रत्येक "मैक" नाम जोड़ रही है, लेकिन यह इस विशिष्ट मामले में काम करता है। – tadman

+0

सच है। मुझे आश्चर्य है कि कुछ 'inflect.human /mc(.*)/, "मैक # {$ 1} .titleize" जैसे चमत्कार चमत्कारी रूप से काम कर सकता है। –

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