Elvi Digital

Inflections – словоизменения в Rails

Ruby ob Rails имеет специальный класс Inflector, который предназначен для автоматического изменения правописания слов в контексте их применения. Речь идет, к примеру, об изменении названия класса, скажем City, для именования таблицы в базе во множественном числе – cities. В большинстве случаев этот класс работает потрясающе грамотно, зная много правильных вариантов приведения, как то person => people, но в некоторых ситуациях может давать сбой, в частности при использовании в названиях неанглийских слов (латинских, немецких, русские названия, написанные транслитом). В любом случае, если есть подозрение на то, что выбранное вами для модели название может быть неправильно переведено рельсами во множественное число – всегда можно сначала проверить работу класса Inflector при помощи консоли:

ActiveSupport::Inflector.pluralize "virus"

или еще проще (так как Inflector можно использовать сразу же с любыми строками):

"virus".pluralize

Кстати, результатом предыдущих операций будет множественное число от virus, а это – слово viri. Что есть грамматически правильный перевод, но все же более распространенный в быту вариант есть viruses.

Так вот – если класс Inflection работает по любой причине не так, как вы хотите – откройте файл config/initializers/inflections.rb, раскомментируте шаблон, который вы там увидите, и внесите свои правки:

ActiveSupport::Inflector.inflections do |inflect|
  #   inflect.plural /^(ox)$/i, '\1en'
  #   inflect.singular /^(ox)en/i, '\1'
  #   inflect.irregular 'person', 'people'
  #   inflect.uncountable %25w( fish sheep )
  inflect.irregular 'virus', 'viruses'
end

И главное – обязательно нужно будет перезапустить сервер или консоль после внесения изменений в данный файл!