【问题标题】:No route matches {:controller=>"submissions"}没有路线匹配 {:controller=>"submissions"}
【发布时间】:2016-01-04 19:09:09
【问题描述】:

我在运行一个只执行get :index 的测试时收到此错误。下面是测试代码:

class SubmissionsControllerTest < ActionController::TestCase
  setup do
    @submission = submissions(:one)
  end

  test "should get index" do
    get :index
    assert_response :redirect
    # assert_not_nil assigns(:submissions)
  end

尽管在我的 routes.rb 文件中,我为此控制器设置了一个路由:

resources :courses do
    resources :assignments do
      get 'export', :controller => 'assignments', :action => 'export'
      resources :memberships
      resources :submissions do
        resources :evaluations do
          delete 'destroy', controller: 'reviews', action: 'destroy'
        end
      end

      resources :questions do
        resources :responses
        resources :scales
      end

      resources :reviews do
        get :assign_reviews, :on => :collection
        post :edit_review, :on => :collection
      end

    end
  end

另外,这是我在运行 rake 路由时获得的提交路由:

course_assignment_submissions GET    /courses/:course_id/assignments/:assignment_id/submissions(.:format)  submissions#index
POST /courses/:course_id/assignments/:assignment_id/submissions(.:format)  submissions#create
new_course_assignment_submission GET    /courses/:course_id/assignments/:assignment_id/submissions/new(.:format)  submissions#new
edit_course_assignment_submission GET    /courses/:course_id/assignments/:assignment_id/submissions/:id/edit(.:format)  submissions#edit
course_assignment_submission GET    /courses/:course_id/assignments/:assignment_id/submissions/:id(.:format)  submissions#show
PUT /courses/:course_id/assignments/:assignment_id/submissions/:id(.:format)  submissions#update
DELETE /courses/:course_id/assignments/:assignment_id/submissions/:id(.:format)  submissions#destroy

这是我的索引操作代码:

def index
    if !current_user.instructor?(@course)
      raise CanCan::AccessDenied.new("Not authorized!")
    end

    registrations =  @course.registrations
    @students = registrations.select{|r| !r.user.pseudo or @assignment.memberships.any?{|m| m.pseudo_user_id == r.user_id }  }.map{|r| r.user }
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @students }
    end
  end

有谁知道这个错误可能来自哪里?

【问题讨论】:

  • 你能添加你的测试代码吗?
  • 刚刚添加了我的测试代码
  • 能否包含测试代码的类(例如,class SubmissionsController &lt; ActiveSupport::TestCase)?此外,您似乎在 routes.rb 中的 assignments 块末尾缺少一个 end
  • 类是:CoursesControllerTest
  • 您没有在测试名称中包含类的顶部,并且错过了路线的终点或错误的意图,这确实会损害我们帮助您的机会。您甚至没有包含相关控制器的索引操作。

标签: ruby-on-rails ruby testing


【解决方案1】:

因为您的 submissions 控制器嵌套在 assignmentsassignmentscourses 中,所以您必须将 :assignment_id:course_id 传递到您的 get 请求中。

例如:

get :index, course_id: your_course, assignment_id: your_assignment

【讨论】:

  • 我试过这个,它给了我一个错误 ActionController::RoutingError: No route matches {:assignment_id=>"1", :controller=>"submissions"}。另外,我认为这不是问题,因为我的成员资格路由的定义方式相同,并且该控制器的 get :index 测试通过
  • 我已经更新了答案。好吧,这听起来很奇怪,因为您的路线必须以某种方式获取 ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 2012-07-22
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多