简体   繁体   中英

ActionController::UrlGenerationError: No route matches action and controller

I couldn't find a solution in the other relative questions, so I'm asking my own.

The problem is pretty straightforward. This is the error I'm getting:

Failure/Error: get 'api/v2/special_keys#show'
 ActionController::UrlGenerationError:
   No route matches {:action=>"api/v2/special_keys#show", :controller=>"api/v2/special_keys"}

This is my routes.rb :

resources :special_keys, only: [] do
  collection do
    get '', to: 'special_keys#show'
  end
end

This is the output from rake routes :

GET /api/v2/special_keys(.:format) api/v2/special_keys#show {:format=>"json"}

And my spec:

require 'rails_helper'

describe Api::V2::SpecialKeysController do
  describe 'GET #show' do
    it 'gets the policy and signature' do
      get '/api/v2/special_keys'

      expect(response.status).to eql 200
    end
  end
end

Try to rewrite your test as:

require 'rails_helper'

describe Api::V2::SpecialKeysController do
  describe 'GET #show' do
    it 'gets the policy and signature' do
      get '/api/v2/special_keys', {format: :json}

      expect(response.status).to eql 200
    end
  end
end

Try:

resource :special_keys, only: [:show]

The singular tells the app, that there is only one. So it will only generate a show action that needs no id and no index action at all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM