2011-03-04 15 views
10

Bu dizenin sonuna bir '/' eklemeyi deniyorum. Bunu yapmanın en iyi yolu nedir?Ruby'de bir dize ekleme

>> params[:id] 
"shirts" 

params[:id] == "shirts/" yapmak istiyorum. Bu dizenin sonuna nasıl / ekleyebilirim? Bunun gibi

cevap

17

En basit:

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

veya

params[:id] += '/' 

Moar fantezi:

params[:id] << '/' 

Yine başka bir yol Bunu yapmanın:

params[:id].concat '/' 

Eğer gerçekten bizzare nedense gsub ısrar ederse:

params[:id].gsub! /$/, '/' 
1

:

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

gerekmez gsub :)

Sürece bazı durumlarda bir Sondaki eğik çizgi olabilir. Sonra kullanın:

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

Kürek operatörü?

params[:id] << "/" 
0

params[:id] << "/" çalışmalı.

0

Bu şekilde bir URL oluşturmaya çalışıyorsanız, muhtemelen yanlış yapıyorsunuz, ancak size doğru yolu söyleyemem.

Bir dizin yolu bu şekilde oluşturmaya çalışıyorsanız ve yol için başka bitler varsa, File.join gibi bir şey kullanın. Link to the documentation

3

"En iyi" kullanımı durumda büyük ölçüde bağlıdır ama şu kodu göz önünde bulundurun:

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

Beklendiği gibi, << bir çizgi ama ... eklemiştir

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

Yani Bu yöntemlerle anlayış düzeyinize bağlı olarak, beklemeyeceğiniz bir davranış budur. Karşılaştırma:

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

Temel olarak, bazı yöntemler yeni nesneler oluşturur ve diğerleri mevcut olanları değiştirir. Bunu object_id yöntemiyle test edebiliriz.

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

Şimdi

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

başarıyla yeni bir nesne yaratmadan ve str2 hala aynı nesneye aynı zamanda "güncelleme" alır işaret beri str1 modifiye ettik. Son olarak, eğer biz += yöntemi kullanmak: Biz STR1 bir şey eklemiş

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

Bildirimi ama yine de yeni bir nesne oluşturur.