Rails - название модели заканчивается на S

У меня есть модель с именем ActiveDns. Когда я запустил

rails g scaffold_controller ActiveDns

Я получаю сообщение

Множественная версия модели обнаружена, используя сингулярную версию. Переопределить с помощью -force-множественное число.

Теперь создается контроллер и представления, притворяясь, что единственное число ActiveDn, а множественное число ActiveDns, и я получаю глупые вещи, такие как link_to new_dn_path. Аргумент --force-plural, похоже, не исправляет это:

rails g scaffold_controller ActiveDns --force-plural

все еще приводит к контроллерам, использующим переменные с именем @active_dn и представлениями с использованием new_dn_path, с рельсами 3.2.3. Я удаляю файлы между попытками, используя rails d scaffold_controller ActiveDns.

Каков правильный способ сделать это?

Ответы

Ответ 1

Каков правильный способ сделать это?

Я использую inflections для document несчетных объектов.

конфигурации/Инициализаторы/inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.uncountable "ActiveDns"
end

Затем вы получите:

$ rails g scaffold_controller ActiveDns
      create  app/controllers/active_dns_controller.rb
      invoke  erb
      create    app/views/active_dns
      create    app/views/active_dns/index.html.erb
      create    app/views/active_dns/edit.html.erb
      create    app/views/active_dns/show.html.erb
      create    app/views/active_dns/new.html.erb
      create    app/views/active_dns/_form.html.erb
      invoke  test_unit
      create    test/functional/active_dns_controller_test.rb
      invoke  helper
      create    app/helpers/active_dns_helper.rb
      invoke    test_unit
      create      test/unit/helpers/active_dns_helper_test.rb

Это то, что вы хотели?

Ответ 2

Я тестировал с рельсами-3.2 (думаю, он должен работать с rails-3.x)

Откройте config/initializers/inflections.rb и добавьте правило:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'dns', 'dnses'
end

И сгенерируйте контроллер

rails g scaffold_controller ActiveDns

И добавьте маршруты в ваш config/routes.rb файл

resources :active_dnses

Затем вы должны увидеть:

$ rake routes

   active_dnses GET    /active_dnses(.:format)          active_dnses#index
                POST   /active_dnses(.:format)          active_dnses#create
 new_active_dns GET    /active_dnses/new(.:format)      active_dnses#new
edit_active_dns GET    /active_dnses/:id/edit(.:format) active_dnses#edit
     active_dns GET    /active_dnses/:id(.:format)      active_dnses#show
                PUT    /active_dnses/:id(.:format)      active_dnses#update
                DELETE /active_dnses/:id(.:format)      active_dnses#destroy

Ответ 3

Я хочу поделиться о том, как я решаю свою проблему.

У меня есть MVC с именем Pacman в Data_Warehouse.

Где Pacman - собственное существительное. (Не может быть Pacmen с e, но должно быть Pacmans с s)

А Data_Warehouse - это имя платформы. (Может быть что угодно, в данном случае это DataWarehouse::Pacman)

Так что я

Название models/data_warehouse/pacman.rb - models/data_warehouse/pacman.rb

Название views/data_warehouse/pacmans/index.slim - views/data_warehouse/pacmans/index.slim

Имя контроллера - controller/data_warehouse/pacmans_controller.rb

Проблема в том, что Rails читает этот путь

data_warehouse_pacmans_path

как

data_warehouse_pacmen_path

из-за плюрализации.

Так

Я решил это, добавив

ActiveSupport::Inflector.inflections do |inflect|
   inflect.uncountable %w( pacmans )
end

в файл inflections.rb в Rails.

Надеюсь, это поможет