我一直在遇到这个错误:
No route matches {:action=>"create", :controller=>"xaaron/api_keys"}
这个错误是在测试中抛出的:
it "should not create an api key for those not logged in" do
post :create
expect(response).to redirect_to xaaron.login_path
end
当我进入spec/dummy
并运行rake routes
命令时,我看到:
api_keys GET /api_keys(.:format) xaaron/api_keys#index
POST /api_keys(.:format) xaaron/api_keys#create
new_api_key GET /api_keys/new(.:format) xaaron/api_keys#new
edit_api_key GET /api_keys/:id/edit(.:format) xaaron/api_keys#edit
api_key GET /api_keys/:id(.:format) xaaron/api_keys#show
PATCH /api_keys/:id(.:format) xaaron/api_keys#update
PUT /api_keys/:id(.:format) xaaron/api_keys#update
DELETE /api_keys/:id(.:format) xaaron/api_keys#destroy
这表明这条路线确实存在。我这个引擎的路由文件看起来像是:
Xaaron::Engine.routes.draw do
get 'login' => 'sessions#new', :as => 'login'
get 'logout' => 'sessions#destroy', :as => 'logout'
get 'signup' => 'users#new', :as => 'signup'
get 'permission_denied' => 'error#denied', :as => 'permission_denied'
get 'record_not_found' => 'error#error', :as => 'record_not_found'
get 'password_reset' => 'password_resets#edit', :as => 'rest_user_password'
resource :error, controller: 'error'
resources :users
resources :api_keys
resources :sessions
resources :roles
resources :password_resets
end
我错过了什么?
更新
如果你们好奇我是如何获得这些路由的,那是因为这个虚拟应用程序的路由文件被设置为(默认情况下)如下:
Rails.application.routes.draw do
mount Xaaron::Engine => "/xaaron"
end
更新 II
我一直在阅读这个引擎路由的api文档,我相信我做的方式是正确的,但是控制器被定义为:
module Xaaron
class ApiKeysController < ActionController::Base
before_action :authenticate_user!
def index
@api_key = Xaaron::ApiKey.where(:user_id => current_user.id)
end
def create
@api_key = Xaaron::ApiKey.new(:user_id => current_user.id, :api_key => SecureRandom.hex(16))
create_api_key(@api_key)
end
def destroy
Xaaron::ApiKey.find(params[:id]).destroy
flash[:notice] = 'Api Key has been deleted.'
redirect_to xarron.api_keys_path
end
end
end
mount
做一些研究。api_keys
控制器是如何定义的?它在xaaron
模块中吗?请分享一些具体细节/代码。 - Kirti Thorat