rspec ActionController::UrlGenerationError для создания действия в администраторе пространства имен, который является вложенным

Я получаю эту ошибку в спецификации контроллера для моего действия создания

No route matches {:action=>"create", :assessment=>{:course_id=>"1", :curriculum_id=>"1"}, :controller=>"admin/assessments"}

Вот моя спецификация контроллера:

it "sets the flash success" do
  set_current_admin
  course = Fabricate(:course)
  post :create, assessment: { course_id: course.id, curriculum_id: course.curriculum.id }
  expect(flash[:success]).not_to be_blank
end

Ошибка возникает на post :create.. линия.

Вот мое создание действий для оценок:

def create
  @assessment = Assessment.new(assessment_params.merge!(course_id: Course.find(params[:course_id]).id))
  if @assessment.save
    flash[:success] = "You have created your assessment."
    redirect_to curriculum_course_assessment_path(@assessment.course.curriculum, @assessment.course, @assessment)
  else
    ...
  end
end

И вот мой маршрут для оценок:

resources :curriculums, only: [:index, :show] do
  resources :courses, only: [:show] do
    resources :assessments, only: [:show]
    namespace :admin do
      resources :assessments, only: [:index, :new, :create, :edit, :update]
    end
  end
end

Вот строка из моего rake routes...

POST /curriculums/:curriculum_id/courses/:course_id/admin/assessments(.:format) admin/assessments#create

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

1 ответ

Вы вкладываете course_id а также curriculum_id параметры внутри assessment hash - в маршруте они не вложенные.

Другие вопросы по тегам