Ruby on Rails: Преобразование "SomeWordHere" в "какое-то слово здесь"

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

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

чтобы получить "какое-то слово здесь".

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

Ответ 1

alt text

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

"SomeWordHere".underscore => "some_word_here"

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

"SomeWordHere".underscore.humanize.downcase => "some word here"

Ответ 2

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

"SomeWordHere".titleize.downcase

Ответ 3

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

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

Ответ 4

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