Я пытаюсь просто добавить '/' в конце этой строки. Каков наилучший способ сделать это?
>> params[:id]
"shirts"
Я хотел бы сделать params[:id] == "shirts/"
. Как добавить /
в конец этой строки?
Я пытаюсь просто добавить '/' в конце этой строки. Каков наилучший способ сделать это?
>> params[:id]
"shirts"
Я хотел бы сделать params[:id] == "shirts/"
. Как добавить /
в конец этой строки?
Простейшие:
params[:id] = params[:id] + '/'
или
params[:id] += '/'
Моар:
params[:id] << '/'
Еще один способ сделать это:
params[:id].concat '/'
Если вы действительно действительно для какой-то причины bizzare настаиваете на gsub:
params[:id].gsub! /$/, '/'
"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, но все еще создаем новый объект.
Вот так:
params[:id] + '/' == 'shirts/'
Не требуется gsub:)
Если в некоторых случаях вы можете иметь косые черты. Затем используйте:
params[:id] = params[:id] + '/' unless params[:id].match(/.*\/$/)
params[:id] == 'shirts/'
Оператор лопаты?
params[:id] << "/"
Я думаю, что params[:id] << "/"
должен работать.
Если вы пытаетесь создать URL-адрес таким образом, вы, вероятно, ошибаетесь, но я не могу сказать вам правильный способ сделать это.
Если вы пытаетесь создать путь к каталогу таким образом, а там есть другие биты, используйте что-то вроде File.join
. Ссылка на документацию