Переопределение маршрутизации контроллера Rails с прописными буквами в названии модели

Я хочу создать модель в рельсах:

rails generate model ABCThing

Итак, это создаст таблицу abc_things. Отлично. Проблема связана с контроллером и маршрутизацией. Я хочу, чтобы мой контроллер был:

class ABCThingsController < ApplicationController
end

Однако после добавления в routes.rb

resources :abc_things, :only => [:index]

и создания соответствующего представления index, я получаю следующую ошибку в браузере:

Expected /app/controllers/abc_things_controller.rb to define AbcThingsController

Проблема легко увидеть ("ABCThings".tableize.classify => "AbcThing"), но я не уверен, как ее исправить. Я хочу переопределить маршрутизацию по умолчанию rails из представления в контроллер, но не знаю, как это сделать.

Поблагодарили бы за любую помощь (и предложения для лучшего названия вопроса!)

Ответ 1

У меня была эта проблема и после попытки всех вышеперечисленных решений; смог исправить мою проблему с помощью инфлектора.

В моем случае проблема заключалась в том, что TLA::ThingsController был решен как Tla::ThingsController

положить следующее в моей папке инициализаторов исправил это

config/initializers/inflections.rb

ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'TLA'
end

Ответ 2

Вы должны установить имя пользовательского контроллера в route.rb:

resources :abc_things, :only => [:index], :controller => "ABCThings"

Ответ 3

В какой-то момент это может быть изменено с помощью Ruby, но для наименования классов с несколькими шапками в строке (акронимы или инициализаторы) вам больше не нужно включать подчеркивание в имя файла.

# abc_thing.rb

может содержать

class ABCThing

  def hello
    puts "Hello World"
  end

end

или

class ABCThing

  def hello
    puts "Hello World"
  end

end

Ответ 4

При запуске команды

rails generate model ABCThings

Он будет генерировать модель, а не контроллер. Если вы хотите, чтобы модель и контроллер использовали следующие

rails generate scaffold ABCThings

Я думаю, что вы не создаете контроллер, используя команду rails, и, следовательно, возникла проблема для генерации контроллера используйте следующую команду

rails generate controller ABCThings

и вы можете /app/controllers/abc_things_controller.rb следующим образом

class AbcThingsController < ApplicationController
end