2015-01-24 7 views
0

Я делютизировал все простые поля полей полей по умолчанию, что отлично, и я понял, как добавить аббревиатуру, чтобы оставаться заглавной в инициализаторе переходов, что круто! (Так что «США» остаются «США» и не становятся «США»). Тем не менее, я застрял в вопросе пунктуации.Rails Заглавие с помощью «(s)»

"Государство (ы)" становится "государством (S)" после прохождения классификации. И «State/s» также становится «State/S».

Любая идея, как я могу добавить исключение для таких случаев, чтобы он не использовал этот последний «S»?

ответ

2

Вы можете посмотреть на code for the Rails titleize method on github, и вы увидите, что регулярное выражение посланы в качестве параметра GSUB является:

/\b(?<!['’`])[a-z]/ 

Как написано, GSUB принимает каждый согласованный характер в выражении и капитализирует его.

Отличный ресурс для проверки регулярных выражений Ruby - rubular.com. Вы можете вставить в регулярное выражение (не забывайте, что он уже дает вам ведущий и конечный «/»), и попробуйте разные строки, чтобы увидеть, какие совпадения.

Это a quick test, используя указанное выше выражение. Вы увидите, что не только «уличный свет (S)» сломался (получить второй капитал S, но «Feee-Ling» сломан - получает капитал L.

В этом случае ключ к вашей проблеме является раздел в регулярном выражении:

['’`] 

... который я бы вывод используется для выявления всевозможных апострофа, чтобы получить притяжательных и стягивания право Если бы вы были поставить (в скобках, ваша проблема будет. Будьте осторожны в рублевом режиме. Наблюдайте за исчезновением подсветки!

Я не мог точно сказать вам, какие последствия обезглавливают метод Rails. Напишите свой собственный!

def titleize_optional_plurals(word) 
    humanize(underscore(word)).gsub(/\b(?<!['’`(])[a-z]/) { $&.capitalize } 
end 
Смежные вопросы