Подтвердить что ты не робот

Неинициализированная константа "Имя контроллера"

У меня возникла ошибка с моими маршрутами/ресурсами и контроллерами.

У меня есть на маршрутах route.rb:

# routes.rb
resources :users do  
  resource :schedule  
end

И у меня есть controller_controller.rb внутри контроллеров/пользователей/настроен, как я думаю, это должно быть:

class Users::ScheduleController < ApplicationController

  # Controller methods here...

end

Запуск rake: показывает маршруты

user_schedule      POST   /users/:user_id/schedule(.:format)       schedules#create
new_user_schedule  GET    /users/:user_id/schedule/new(.:format)   schedules#new
edit_user_schedule GET    /users/:user_id/schedule/edit(.:format)  schedules#edit
                   GET    /users/:user_id/schedule(.:format)       schedules#show
                   PUT    /users/:user_id/schedule(.:format)       schedules#update

Однако при переходе к /users/: user_id/schedule возвращается следующая ошибка:

uninitialized constant SchedulesController

Мои мысли о том, что может быть проблемой, это то, что связано с вложенными ресурсами или объявлением одного ресурса, и я где-то ошибаюсь.

Я использую помощник

new_user_schedule_path(current_user)

при соединении с моим "новым" представлением.

4b9b3361

Ответ 1

Он должен быть SchedulesController, а не Users::ScheduleController. Контроллеры должны иметь место только для имен, когда маршрут namespaced с namespace. Названия контроллеров также должны быть множественными.

То, что вы создаете, представляет собой вложенный ресурс, а не файл с именами.

Ответ 2

Является ли назначение имен SchedulesController преднамеренным? то есть вы действительно хотите это сделать?

class Users::SchedulesController < ApplicationController

Или вы делаете это только потому, что расписания являются "суб-вещью" от пользователей?

Причина, по которой я спрашиваю об этом, заключается в том, что, как правило, в Rails вложенные контроллеры ресурсов не занимают место. Вы бы просто прописались над контроллером, если бы вы хотели модифицировать контроллеры особым образом в пространстве имен. Общим примером этого может быть наличие некоторых контроллеров в пространстве имен admin, наследующих от BaseController внутри этого пространства имен, которое ограничивало бы только админов от доступа к этим контроллерам.

Вариант 1

Если вы не намеренно пропустили пробел в этом контроллере, вы хотите удалить префикс Users:: из своего контроллера и переместить его обратно в app/controllers/schedules_controller.rb, а затем вернуться к app/helpers/schedules_helper.rb и вернуться к app/views/schedules. Возможно, вы запустили генератор, который также сгенерировал модель Users::Schedule, которую также нужно переименовать в Schedule и вернуться к app/models/schedule.rb.

Вариант 2

Если вы намеренно прописали пробел в этом контроллере, то вы хотите сделать это на своих маршрутах:

namespace :users do
  resources :schedules
end

Оставьте все, что было создано, как должно быть.

Ответ 3

заменить ресурсы: пользователи на пространство имен: пользователи

Поскольку ваш контроллер расписания находится внутри папки пользователя. класс Пользователи:: ScheduleController < ApplicationController # Методы контроллера здесь... конец

Ответ 4

В ваших route.rb вам нужно указать контроллер следующим образом:

resources :users do resource :schedules, controller: 'users/shedules' end