【问题标题】:rspec ActionController::UrlGenerationError for create action in namespaced admin that is nestedrspec ActionController::UrlGenerationError 用于在嵌套的命名空间管理员中创建操作
【发布时间】:2015-02-02 14:51:58
【问题描述】:

我的创建操作的控制器规范中出现此错误

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

当我在浏览器中实际运行创建操作时,它工作正常,所以我猜测这是我的规范语法的问题。对此的任何建议将不胜感激。 (我意识到我在这里的资源是双重嵌套的,这通常不是最佳实践,但我找不到任何其他方式来访问课程和课程参数。)

【问题讨论】:

    标签: ruby-on-rails rspec actioncontroller


    【解决方案1】:

    您将 course_idcurriculum_id 参数嵌套在 assessment 哈希中 - 在路由中,它们没有嵌套。

    【讨论】:

    • 您的规范行实际上并没有发布任何assessment 数据,所以它只是post :create, course_id: foo, curriculum_id: blah, assessment: {}。您只需要允许作为 assessment 哈希的一部分传入的任何内容。
    • 非常感谢!我在post :create...上方添加了这个attrs = Fabricate.attributes_for(:assessment),然后将该行更改为:post :create, assessment: attrs, course_id: course.id, curriculum_id: course.curriculum.id,消除了不正确的嵌套问题。
    猜你喜欢
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多