Дать название дефису
Метод titleize
Rails удаляет дефисы, а метод Ruby capitalize
не использует заглавные буквы после дефиса. Я хочу что-то вроде следующего:
"mary-joe spencer-moore" => "Mary-Joe Spencer-Moore"
"mary-louise o'donnell" => "Mary-Louise O'Donnell"
Ответы
Ответ 1
Проверить реализацию Titelize, и из него вы можете получить:
"mary-joe spencer-moore".humanize.gsub(/\b('?[a-z])/) { $1.capitalize }
даст вам = > "Мэри-Джо Спенсер-Мур"
и вы можете написать для него функцию в классе строк, добавьте в intalizers:
class String
def my_titleize
humanize.gsub(/\b('?[a-z])/) { $1.capitalize }
end
end
а затем из вашего кода:
"mary-joe spencer-moore".my_titleize
Ответ 2
Вы также можете получить желаемый результат, разделив строку и разделяя ее по разделам отдельно:
"mary-louise o'donnell".split('-').map(&:titleize).join('-')
Ответ 3
%q%mary-louise o'donnell%.gsub(/\b([a-z])/) { $1.capitalize }
=> "Mary-Louise O'Donnell"
Тем не менее, если вы можете вводить данные с неожиданными заглавными буквами (например, "МЭРИ-ЛУИЗ О'ДОННЕЛЛ"), вам сначала потребуется .downcase
; более того, если у вас могут быть значения nil
для имени и фамилии, и вы затем присоединяетесь к ним, тогда вам понадобится .strip
:
[first_name, last_name].join(' ').downcase.gsub(/\b([a-z])/) { $1.capitalize }.strip