Использование titleize для аббревиатуры в Rails - PullRequest
9 голосов
/ 29 марта 2011

Я определяю некоторые активные записи с аббревиатурами.RvPark (Парк отдыха и развлечений).Когда я называю название класса, я получаю «Rv Park».Это действительно должен быть «RV Park».Есть ли хороший способ сделать это?Поскольку эта модель делит код с другими моделями, мне нужно создать общее решение, но я не смог его найти.

Я видел обсуждение этого, но не былоРешение, которое сработало для меня.Любое понимание приветствуется.

https://rails.lighthouseapp.com/projects/8994/tickets/2944-titleize-doesnt-take-all-uppercase-words-into-account

Ответы [ 2 ]

16 голосов
/ 25 марта 2014

Вы можете сделать это, настроив ActiveSupport :: Inflector , который предоставляет метод titleize .Просто определите свои перегибы в инициализаторе.

# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'RV'
end

Перезапустите приложение, чтобы получить изменения.Теперь titleize знает, как обращаться с "RV".Запустите консоль Rails, чтобы проверить это:

> "RvPark".titleize
=> "RV Park"
> "rv".titleize
=> "RV"

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

3 голосов
/ 29 марта 2011

ОБНОВЛЕНИЕ: Поддержка аббревиатур была добавлена ​​в Rails Inflector после того, как я опубликовал это.

См. @ Ответ Ансона для Rails 3.2 и выше.


Это похоже на крайний случай, для которого titleize не был предназначен.Проблема в том, что вызов capitalize внутри всегда превращает RV в Rv.

Я бы создал функцию общего имени для моделей, которые вызывают self.class.titleize внутри, а затем перегрузил бы ее в модели RVPark.

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