我在我的创建操作的控制器规范中收到此错误
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
当我在浏览器中实际运行创建操作时,它运行正常,因此我猜测它是我的规范语法的问题。对此有任何建议将非常感激。 (我意识到我在这里通过资源进行双重嵌套,这通常不是最好的做法,但我找不到任何其他方式来访问课程和课程参数。)
答案 0 :(得分:1)
您将course_id
和curriculum_id
参数嵌套在assessment
哈希中 - 在路线中,它们不是嵌套的。