10

モデルが関連付けられていないものBaseControllerから継承するという名前のコントローラーがありますが、すべてが正常であることを通知するメッセージで応答するメソッドがあります。ApplicationControllerping

route.rb ファイルでこれを設定する BaseController を介してアクション ping を呼び出そうとしています:

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は、他のコントローラーが継承する単なる親コントローラーです。その他は機知に富んだコントローラーであり、モデルが関連付けられています

ありがとう。

4

3 に答える 3

11

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

したがって、あなたの場合、通常は app/controllers/api/base_controller.rb に格納される Api::BaseController というコントローラーを探します。これはあなたのコントローラーの設定方法ですか?

詳細については、こちらを参照してください: http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

編集:

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

コントローラのモデルがない場合は、呼び出しを行いますauthorize_resource :class => false

詳細については、このページの下部を参照してください。

于 2012-10-11T09:01:26.943 に答える
0

routes.rb map.resources :base, :collection=> {:ping=>:get} でこれを試してください

于 2012-10-11T10:23:12.273 に答える
0

これを試してください:

これをroutes.rbに追加します

resources :base
于 2012-10-11T09:05:33.437 に答える