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

Joh*_*ohn 10 controller routes model ruby-on-rails

我有一个名为BaseController继承自ApplicationControllerwhitout模型的控制器,但它有一个ping方法只响应一条消息,告知一切正常.

我试图通过我的routes.rb文件中的BaseController设置调用动作ping:

namespace :api, defaults: { format: 'json' } do   
  match '/ping' => 'base#ping' 
end
Run Code Online (Sandbox Code Playgroud)

但它总是给我一个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
Run Code Online (Sandbox Code Playgroud)

作为额外信息:BaseController只是其他控制器继承的父控制器.其他是资源丰富的控制器,并具有相关的模型

谢谢.

dna*_*oli 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.

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