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

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

У меня есть следующие в маршрутах.rb:

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

И у меня есть schedule_controller.rb внутри controllers / users /, который, как я думаю, должен быть:

class Users::ScheduleController < ApplicationController

  # Controller methods here...

end

Запуск граблей: маршруты показывают

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)

при ссылке на мойновый» Посмотреть.

 amayer17129259106 февр. 2017 г., 18:45
В моем случае имя файла контроллера было не в правильном формате. Имя файла должно бытьschedules_controller.rb»
 matt29 окт. 2012 г., 05:01
Обратите внимание, что ScheduleController не является SchedulesController.
 stralsi23 июн. 2016 г., 09:50
Я пришел к этому вопросу в поисках ошибки в названии, но не имеявложенными противNamespaced проблема ресурсов. В моем случаефайл контроллера не был помещен в правильную папку.

Ответы на вопрос(4)

Решение Вопроса

SchedulesControllerнеUsers::ScheduleController, Контроллеры должны быть пространством имен только когда маршрутпространство имен сnamespace, Имена контроллеров также всегда должны быть во множественном числе.

Что ты'воссоздание являетсявложенными ресурс, а не пространство имен.

 Adam29 окт. 2012 г., 19:25
Спасибо за Ваш ответ. Я действительно путал вложенные ресурсы и пространство имен. Кроме того, используя единственное числографик' также вызывал проблемы.
 Tsagadai29 окт. 2012 г., 09:33
Иногда множественное число неправильное, особенно для сложных множественных или сложных слов. В этих случаях вы можете изменить файл inflections.rb, чтобы rails искал 'множественное число.
 Jared Beck29 окт. 2012 г., 05:10
Единственный пример ресурса вруководство по маршрутизации имеет имя класса во множественном числе, так что я ожидаю, что ЭндрюПравильно, и имя вашего контроллера должно быть во множественном числе.

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

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

class Users::SchedulesController < ApplicationController

Или вы делаете это только потому, что графики "суб-дело» от пользователей?

Я спрашиваю об этом потому, что, как правило, в Rails, вложенные контроллеры ресурсовне Namespaced. Вы бы только назвали пространство контроллера, если бы вы хотели модифицировать контроллеры особым образом в пространстве имен. Типичным примером этого может быть наличие некоторых контроллеров в пространстве имен администратора, наследуемых от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

Оставь все, чтоСгенерировано так, как должно быть.

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

Ваш ответ на вопрос