Как добавить строку в Ruby - PullRequest
10 голосов
/ 04 марта 2011

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

>> params[:id]
"shirts"

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

Ответы [ 6 ]

18 голосов
/ 04 марта 2011

Простейшее:

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

или

params[:id] += '/'

Фантазия Мора:

params[:id] << '/'

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

params[:id].concat '/'

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

params[:id].gsub! /$/, '/'
4 голосов
/ 27 апреля 2016

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

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

1 голос
/ 04 марта 2011

Оператор экскаватора?

params[:id] << "/"
1 голос
/ 04 марта 2011

Как это:

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

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

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

params[:id] = params[:id] + '/' unless params[:id].match(/.*\/$/)
params[:id] == 'shirts/'
0 голосов
/ 07 марта 2011

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

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

0 голосов
/ 04 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...