Рубин на рельсах: замените корпус верблюда пространством

Я хочу преобразовать слова верблюда, например camelCase, в CAMEL CASE. Я пробовал упомянутый подход here.

@q = params[:promo].underscore.humanize.upcase

Но это дает мне camelCase, а не CAMEL CASE тот же результат при использовании:

@q = params[:promo].gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase

EDIT: url содержит /camelCase, но при использовании параметров [: promo] случай верблюда не сохраняется, а @q - camelCase

Ответ 1

»  'camelCase'.underscore.humanize.upcase
=> "CAMEL CASE"

Ответ 2

Если кому-то понадобится что-то вроде "CamelCase" в "Camel Case", вы можете использовать

'CamelCase'.underscore.split('_').collect{|c| c.capitalize}.join(' ')

Или "CamelCase" в "случай верблюда"

'CamelCase'.underscore.split('_').join(' ') 

Или "CamelCase" в "Случай верблюда"

'CamelCase'.underscore.humanize

N.B: Это решение специфично для рельсов, оно не работает в рубине без ActiveSupport.

Ответ 3

Просто замените свой верхний символ буквой на себя, предварительно добавив пробел, а затем сделайте все заглавные

'camelCase'.gsub(/[A-Z]/, ' \0').upcase

Ответ 4

'camelCase'.split(/(?=[A-Z])/).join(' ').upcase