2011-03-04 8 views
10

Estoy intentando simplemente agregar un '/' al final de esta cadena. ¿Cuál es la mejor manera de hacer esto?Cómo agregar una cadena en Ruby

>> params[:id] 
"shirts" 

Me gustaría hacer params[:id] == "shirts/". ¿Cómo agrego un / al final de esa cadena?

Respuesta

17

más simple:

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

o

params[:id] += '/' 

Moar de lujo:

params[:id] << '/' 

Sin embargo, otra manera de hacer esto:

params[:id].concat '/' 

Si realmente por alguna razón bizarra insiste en gsub:

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

De esta manera:

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

Sin gsub necesaria :)

A menos que podría haber una barra diagonal en algunos casos. A continuación, utilice:

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

operador de la pala?

params[:id] << "/" 
0

Creo que params[:id] << "/" debería funcionar.

0

Si está intentando construir una URL de esta manera, probablemente lo esté haciendo mal, pero no puedo decirle la forma correcta de hacerlo.

Si está intentando crear una ruta de directorio de esta manera, y hay otros bits en la ruta, use algo como File.join. Link to the documentation

3

"mejor" depende en gran medida de su caso de uso, pero Consideremos el siguiente código:

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

Como es de esperar, << ha añadido una barra, pero ...

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

Así Dependiendo de su nivel de comprensión con estos métodos, este es un comportamiento que quizás no espere. Compare con:

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

Básicamente, algunos métodos crean objetos nuevos y otros modifican los existentes. Podemos probar esto con el object_id método.

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

Ahora

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

Hemos modificado con éxito str1 sin crear un nuevo objeto y desde str2 sigue apuntando al mismo objeto también obtiene la "actualización". Por último, si usamos el método de +=:

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

en cuenta que hemos añadido nada a str1 pero todavía crea un nuevo objeto.

Cuestiones relacionadas