rspec ActionController :: UrlGenerationError,用于在嵌套的命名空间管理中创建操作

时间:2015-02-02 14:51:58

标签: ruby-on-rails rspec actioncontroller

我在我的创建操作的控制器规范中收到此错误

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 个答案:

答案 0 :(得分:1)

您将course_idcurriculum_id参数嵌套在assessment哈希中 - 在路线中,它们不是嵌套的。