Переопределение маршрутизации контроллера 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