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.
Надеюсь, это поможет