• Ruby on Rails

    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

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

    Опубликовано: Категория: Ruby on RailsКомментарии: 0

    Комментарии

    Пока нет комментариев.

    Оставьте свой комментарий

    Ваше имя: Email: Оставьте свой email, если хотите получать уведомления о комментариях на этой странице. Ваш email не будет опубликован на сайте.