10

我有一个名为的控制器,它从没有关联的模型BaseController继承,但它的方法只响应一条消息以通知一切正常。ApplicationControllerping

我正在尝试通过在我的 routes.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

当您在路由周围放置命名空间时,它将在该命名空间中查找控制器。

因此,在您的情况下,它将寻找一个名为 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

有关详细信息,请参阅本页底部。

于 2012-10-11T09:01:26.943 回答
0

请试试这个:

将此添加到您的 routes.rb

resources :base
于 2012-10-11T09:05:33.437 回答
0

在你的 routes.rb map.resources 中试试这个 :base, :collection=> {:ping=>:get}

于 2012-10-11T10:23:12.273 回答