Як я можу замінити правила призначення імен рейок?


74

У мене є модель під назвою "одяг", якою я хочу стати одиницею (один предмет одягу). За замовчуванням, rails говорить, що множиною є одяг. Правильно чи неправильно, я думаю, це буде більш читабельним, якщо множина - це "одяг".

Як я можу замінити дозвіл на множинні імена? Чи можу я це зробити прямо в моделі, щоб мені не довелося робити це знову і знову? Як це змінить спосіб обробки маршрутів (я використовую спокійну архітектуру)?


10
як щодо зміни вашої моделі на одяг та одяг?
Багатий продавець

Відповіді:


126

Я не фахівець з питань РоР, але знайшов можливий підхід . На вказаному веб-сайті ви можете додати правило перегину всередині config/initializers/inflections.rbфайлу:

# Add new inflection rules using the following format 
ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'clothing', 'clothes'
end

45
Насправді, ваші власні флексії повинні знаходитись у config / initializers / inflections.rb
Аарон Рустад,

3
Для тих, хто ледачий, як я: ActiveSupport::Inflector.inflections do |inflect|якщо він не знаходить Інфлектора самостійно
Абе Петрілло,

Мені подобається ваш підхід. Якби у мене було багато "користувальницьких" флексій, я б зберігав їх у yaml і завантажував файл у той самий архів.
Aldana

1
Якщо передано необов’язкову локаль, можна вказати правила для інших мов. Якщо не вказано, за замовчуванням встановлено значення : en, яке забезпечить правила англійської мови. ActiveSupport::Inflector.inflections(:en)
Шрі Радж

28

Для рейок 2.3.2 і, можливо, 2+, потрібно зробити це дещо інакше:

ActiveSupport::Inflector.inflections do |inflect|
    inflect.plural /^(ox)$/i, '\1\2en'
    inflect.singular /^(ox)en/i, '\1'

    inflect.irregular 'octopus', 'octopi'

    inflect.uncountable "equipment"
end

5

Додайте це у свій environment.rbфайл, якщо ви намагаєтесь зупинити плюралізацію бази даних

ActiveRecord::Base.pluralize_table_names = false

-1

Для Ruby 2.2.2 windows або linux для мене найкращим рішенням було:

ActiveRecord::Base.pluralize_table_names = false

class Persona < ActiveRecord::Base
end


personas = Persona.all
personas.each do | personita |
  print "#{personita.idpersona}   #{personita.nombre}\n"
end

p Persona.count
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.