Ruby on Rails: преобразование SomeWordHere в какое-то слово здесь - PullRequest
14 голосов
/ 16 мая 2010

Я знаю, что вы можете сделать что-то вроде:

"SomeWordHere".underscore.gsub("_", " ") 

, чтобы получить "немного слова здесь".

Я думал, что это может быть слишком много для чего-то такого простого. Есть ли более эффективный способ (может быть, встроенный метод?) Для преобразования «SomeWordHere» в «какое-то слово здесь»?

Ответы [ 4 ]

22 голосов
/ 16 мая 2010

alt text

Методы подчеркивание и humanize предназначены для преобразования таблиц, имен классов / пакетов и т. Д. Вам лучше использовать собственный код для замены, чтобы избежать неожиданностей. Смотрите комментарии.

"SomeWordHere".underscore => "some_word_here"

"SomeWordHere".underscore.humanize => "Some word here"

"SomeWordHere".underscore.humanize.downcase => "some word here"
9 голосов
/ 13 июня 2016

Я думаю, что это более простое решение:

"SomeWordHere".titleize.downcase

5 голосов
/ 16 мая 2010

Вы можете использовать регулярное выражение:

puts "SomeWordHere".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase

Выход:

some word here

Одной из причин, по которой вы можете предпочесть это, является то, что ваш ввод может содержать тире или подчеркивание, и вы не хотите заменять их пробелами:

puts "Foo-BarBaz".underscore.gsub('_', ' ')
puts "Foo-BarBaz".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase

Выход:

foo bar baz
foo-bar baz
1 голос
/ 16 мая 2010

Нет, я не знаю встроенного метода. Есть ли более эффективный, чем однострочник? Не думает так. Может быть humanize вместо gsub, но вы не получите точно такой же вывод.

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