我有一个名为BaseController
的控制器继承自ApplicationController
whitout与模型关联但它有ping
方法只响应一条消息通知一切正常。
我正在尝试通过我的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
只是其他控制器继承的父控制器。其他人是资源丰富的控制器,并且有相关的模型
感谢。
答案 0 :(得分:10)
当您在路由周围放置命名空间时,它将在该命名空间中查找控制器。
所以在你的情况下,它将寻找一个名为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。
答案 1 :(得分:0)
请试试这个:
在routes.rb中添加此内容
resources :base
答案 2 :(得分:0)
在您的routes.rb中尝试此操作 map.resources:base,:collection =&gt; {:平=&GT;:得到}