2011-03-04 3 views
10

में एक स्ट्रिंग को कैसे संलग्न करें मैं इस स्ट्रिंग के अंत में बस '/' जोड़ने की कोशिश कर रहा हूं। इसे करने का बेहतरीन तरीका क्या है?रूबी

>> params[:id] 
"shirts" 

मैं params[:id] == "shirts/" बनाना चाहता हूं। मैं उस स्ट्रिंग के अंत में / कैसे जोड़ूं?

उत्तर

17

सरल:

params[:id] = params[:id] + '/' 

या

params[:id] += '/' 

Moar कल्पना:

params[:id] << '/' 

फिर भी एक और तरीका यह है:

params[:id].concat '/' 

तुम सच में वास्तव में कुछ bizzare कारण के लिए gsub पर जोर देते हैं:

params[:id].gsub! /$/, '/' 
1
इस तरह

:

params[:id] + '/' == 'shirts/' 

नहीं gsub जरूरत :)

आप जब तक कुछ मामलों में स्लैश हो सकता है। तब का उपयोग करें:

params[:id] = params[:id] + '/' unless params[:id].match(/.*\/$/) 
params[:id] == 'shirts/' 
1

फावड़ा ऑपरेटर?

params[:id] << "/" 
0

मुझे लगता है कि params[:id] << "/" काम करना चाहिए।

0

यदि आप इस तरह से एक यूआरएल बनाने की कोशिश कर रहे हैं, तो आप शायद इसे गलत कर रहे हैं, लेकिन मैं आपको ऐसा करने का सही तरीका नहीं बता सकता।

यदि आप इस तरह से एक निर्देशिका पथ बनाने की कोशिश कर रहे हैं, और पथ के अन्य बिट्स हैं, तो File.join जैसे कुछ का उपयोग करें। Link to the documentation

3

"सर्वश्रेष्ठ" आपके उपयोग के मामले पर काफी हद तक निर्भर करता है लेकिन निम्नलिखित कोड पर विचार करें:

a = 'shirts' 
b = a 
params = {} 
params[:id] = b 
params[:id] << '/' 
params[:id] #=> "shirts/" 

हम उम्मीद थी के रूप में, << एक स्लेश लेकिन ... जोड़ा गया है

a #=> "shirts/" 
# a has changed too! 

तो , इन विधियों के साथ समझने के अपने स्तर के आधार पर, यह एक ऐसा व्यवहार है जिसे आप उम्मीद नहीं कर सकते हैं। तुलना करें:

params[:id] += '/' 
params[:id] #=> "shirts/" 
a #=> "shirts" 
# a remains the same 

असल में, कुछ विधियां नई वस्तुओं को बनाती हैं और अन्य मौजूदा लोगों को संशोधित करती हैं। हम object_id विधि के साथ इसका परीक्षण कर सकते हैं।

str1 = 'a' 
str2 = str1 
str1.object_id #=> 14310680 
str2.object_id #=> 14310680 
# Both str1 and str2 point to the same object 

अब

str1 << 'b' #=> "ab" 
str1.object_id #=> 14310680 
str2 #=> "ab" 

हम सफलतापूर्वक str1 एक नई वस्तु बनाने के बिना और str2 अभी भी एक ही वस्तु यह भी "अद्यतन" हो जाता है के लिए अंक के बाद से संशोधित किया है। अंत में, यदि हम += विधि का उपयोग करें:

str1 #=> "ab" 
str1 += '' #=> "ab" 
str1.object_id #=> 15078280 
str2.object_id #=> 14310680 

सूचना है कि हम str1 लिए कुछ भी नहीं जोड़ा है, लेकिन यह अभी भी एक नई वस्तु बनाता है।