Это работает для любых строк с пробелами в них
str.downcase.tr!(" ", "_")
но строки, которые не имеют пробелов, просто удаляются
Итак, "Новая школа" изменится на "new_school", но "цвет" будет "", ничего!
Это работает для любых строк с пробелами в них
str.downcase.tr!(" ", "_")
но строки, которые не имеют пробелов, просто удаляются
Итак, "Новая школа" изменится на "new_school", но "цвет" будет "", ничего!
Документы для tr! say
Translates str in place, using the same rules as String#tr. Returns str, or nil if no changes were made.
Я думаю, что вы получите правильные результаты, если вы используете tr без восклицания.
с пространством
str = "New School"
str.parameterize.underscore
=> "new_school"
без пробела
str = "school"
str.parameterize.underscore
=> "school"
Изменить: - также мы можем передать '_' в качестве параметра для параметризации.
с пространством
str = "New School"
str.parameterize('_')
=> "new_school"
без пробела
str = "school"
str.parameterize('_')
=> "school"
Если вам интересно получить строку в случай с змеей, то предлагаемое решение не совсем работает, потому что вы можете получить конкатенацию подчеркивания и начальные/конечные символы подчеркивания.
Например
1.9.3-p0 :010 > str= " John Smith Beer "
=> " John Smith Beer "
1.9.3-p0 :011 > str.downcase.tr(" ", "_")
=> "__john___smith_beer_"
Это решение ниже будет работать лучше:
1.9.3-p0 :010 > str= " John Smith Beer "
=> " John Smith Beer "
1.9.3-p0 :012 > str.squish.downcase.tr(" ","_")
=> "john_smith_beer"
squish - это метод String, предоставляемый Rails
Старый вопрос, но...
Для всех пробелов вы, вероятно, хотите что-то большее:
"hey\t there world".gsub(/\s+/, '_') # hey_there_world
Это получает вкладки и новые строки, а также пробелы и заменяет собой один _
.
Регулярное выражение может быть изменено в соответствии с вашими потребностями. Например:
"hey\t there world".gsub(/\s/, '_') # hey__there___world
str.downcase.tr(" ", "_")
Примечание: Нет "!"
Вы также можете сделать str.gsub( "," _")
str = "Foo Bar"
str.tr(' ','').underscore
=> "foo_bar"
Если вы используете рельсы 5 и выше, вы можете достичь того же уровня с помощью
str.parameterize(separator: '_')