Как добавить строку в Ruby

Я пытаюсь просто добавить '/' в конце этой строки. Каков наилучший способ сделать это?

>> params[:id]
"shirts"

Я хотел бы сделать params[:id] == "shirts/". Как добавить / в конец этой строки?

Ответ 1

Простейшие:

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

или

params[:id] += '/'

Моар:

params[:id] << '/'

Еще один способ сделать это:

params[:id].concat '/'

Если вы действительно действительно для какой-то причины bizzare настаиваете на gsub:

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

Ответ 2

"Best" во многом зависит от вашего варианта использования, но рассмотрим следующий код:

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, но все еще создаем новый объект.

Ответ 3

Вот так:

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

Не требуется gsub:)

Если в некоторых случаях вы можете иметь косые черты. Затем используйте:

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

Ответ 4

Оператор лопаты?

params[:id] << "/"

Ответ 5

Я думаю, что params[:id] << "/" должен работать.

Ответ 6

Если вы пытаетесь создать URL-адрес таким образом, вы, вероятно, ошибаетесь, но я не могу сказать вам правильный способ сделать это.

Если вы пытаетесь создать путь к каталогу таким образом, а там есть другие биты, используйте что-то вроде File.join. Ссылка на документацию