2012-10-11 11 views
9

ApplicationControllerを継承し、モデルは関連付けられていますが、すべてがOKであることを知らせるメッセージで応答するのはpingメソッドを持っています。レールにモデルのないコントローラのルート3

私はroutes.rbをファイルにこの設定BaseControllerを通じて行動にpingを呼び出すためにしようとしている:

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

しかし、それは常に私にNameError uninitialized constant Baseを与えます。私はそれが存在しないベースと呼ばれるモデルを見つけることを試みていると思う、私は私のコントローラへの正しいルートに設定する方法を知らない。

私BaseControllerの内容は以下の通りです:追加情報として

class Api::BaseController < ApplicationController 
    load_and_authorize_resource 
    respond_to :json 

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

BaseControllerが継承する他のコントローラのためだけの親コントローラです。他の人は、冗長なコントローラで、関連するモデルを持っています。

ありがとう。

答えて

8

ルートの周りに名前空間を配置すると、その名前空間内のコントローラが検索されます。

あなたの場合、通常はapp/controllers/api/base_controller.rbに格納されるApi :: BaseControllerというコントローラが検索されます。あなたのコントローラーはどのようにセットアップされていますか?

詳細はこちらをご覧ください:http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

EDIT:

を私は、その問題のコントローラーを見つけないとは思いません。コントローラでload_and_authorize_resourceを呼び出すため、エラーが発生しています。 CanCanはコントローラ名を使用してリソースのロードを試みます。

コントローラの機種がない場合は、authorize_resource :class => falseに電話してください。

詳細については、bottom of this pageを参照してください。

+0

はい、それは私の構造です。 – John

+0

'BaseController'の内容を質問に追加できますか? – link664

+0

ありがとうございます。 BaseControllerのコンテンツが追加されました。 – John

0

これを試してください:

resources :base 
+0

ありがとうございますが、NameErrorはまだありますが、基本モデルではなく、APIの特定のコントローラーだけです。 BaseControllerを継承するコントローラは正常に動作しますが、モデルは関連付けられています。つまり、pingルートはリソースの多いルートである必要はありません。 – John

0

あなたのroutes.rbをでこれを追加あなたのroutes.rbを map.resourcesでこれを試してみてください:、ベース:コレクション=> {:pingを実行=>:取得}

関連する問題