2012-10-11 35 views
9

我有一個名爲BaseController的控制器,它繼承了ApplicationController沒有關聯的模型,但它有ping方法,它只是用消息做出響應以通知一切正常。沒有模型的控制器的路徑3

我試圖調用通過BaseController動作平設置這在我的routes.rb文件:

namespace :api, defaults: { format: 'json' } do 
    match '/ping' => 'base#ping' 
end 

但它總是給我一個NameError uninitialized constant Base。我想它試圖找到一個叫做Base的模型,它不存在,所以我不知道如何設置到我的控制器的正確路線。

我BaseController的內容如下:

class Api::BaseController < ApplicationController 
    load_and_authorize_resource 
    respond_to :json 

    def ping 
     respond_with({ :status => 'OK' }) 
    end 
end 

由於額外的信息:BaseController只是爲其他控制器繼承父控制器。其他人是足智多謀的控制器,並有相關的型號

謝謝。

回答

8

當您在路由周圍放置命名空間時,它將在該命名空間內查找控制器。

所以在你的情況下,它會尋找一個名爲Api :: BaseController的控制器,它通常會存儲在app/controllers/api/base_controller.rb中。這是你的控制器設置的方式嗎?

在這裏看到更多的細節:http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

編輯:

我不認爲它沒有找到這就是問題的控制器。錯誤是由於您在控制器中調用load_and_authorize_resource而引起的。 CanCan使用控制器名稱嘗試加載資源。

如果控制器沒有型號,請致電authorize_resource :class => false

有關更多詳細信息,請參閱bottom of this page

+0

是的,那是我的結構。 – John

+0

您可以將「BaseController」的內容添加到問題中嗎? – link664

+0

謝謝你,感興趣。添加了BaseController內容。 – John

0

請試試這個:

在routes.rb中添加此

resources :base 
+0

感謝但仍然是NameError,但我沒有一個基礎模型,只是一個API的特定控制器。從BaseController繼承的控制器工作正常,但它們具有關聯的模型。我的意思是,ping路線不一定是一條足跡豐富的路線。 – John

0

在你的routes.rb map.resources試試這個:基地:收集=> {:平=>:得到}

相關問題