2009-07-26 2 views
66

У меня есть модель под названием «одежда», которую я хочу быть единственной (одна часть одежды). По умолчанию рельсы говорят, что множественное число - это одежда. Правильно или неправильно, я думаю, что это будет более читаемо, если множественное число будет «одеждой».Как переопределить соглашения об именах rails?

Как переопределить соглашение о множественном наименовании? Могу ли я сделать это правильно в модели, поэтому мне не нужно делать это снова и снова? Как это изменится, как обрабатываются маршруты (я использую спокойную архитектуру)?

+10

Как насчет смены модели на одежду и одежду? –

+0

Связанный: http://stackoverflow.com/q/6178900/1505348 – Lucio

ответ

115

Я не эксперт RoR, но нашел possible approach. Из ссылочного сайта вы можете добавить правило инфлекционного внутри 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 | ', если он не находит Inflector на своем собственном –

+0

Мне нравится ваш подход. Если бы у меня было много «пользовательских» перегибов, я бы сохранил их в yaml и загрузил файл в том же архиве. – Aldana

27

Для рельсов 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

с Руби 2.2.2 окна или 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 
Смежные вопросы