0

My Rails app is using an engine that defines an acronym inflection:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym "UI"
end

This means (for example) that Rails will load UIHelper from helpers/ui_helper.rb rather than UiHelper.

Now I want to user a gem ("motor-admin") but I'm getting this error:

uninitialized constant Motor::UIController

This is because the gem's class name is Motor::UiController but the inflections are looking for Motor::UIController (note the Ui vs UI).

I've tried following the Customizing Inflections in the Rails Guides, but can't seem to make the error go away.

How can I configure Rails to correctly load Motor::UiController with the "UI" acronym inflection?

Kyle Fox
  • 3,133
  • 4
  • 23
  • 26

1 Answers1

0

Can you try the following:

Rails.autoloaders.each do |autoloader|
  autoloader.inflector.inflect(
    'ui_controller' => 'UIController'
  )
end

edit to add: you might have to do this for the models as well. If you run bin/rails zeitwerk:check it will tell you the files that still need to be changed.

I haven't tried to inflect an included gems controller names, but I did do an upgrade from 5.2 to 7.0 and had to do this for my own controller names which were in the same form that Motor seems to be taking.