在轨道3中没有模型的控制器的路由

时间:2012-10-11 08:53:45

标签: ruby-on-rails model controller routes

我有一个名为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只是其他控制器继承的父控制器。其他人是资源丰富的控制器,并且有相关的模型

感谢。

3 个答案:

答案 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;:得到}