我有一个名为BaseController
的 Controller ,该 Controller 从ApplicationController
继承了关联的模型,但是它具有ping
方法,该方法仅响应一条消息以告知一切正常。
我正在尝试通过我的routes.rb文件中的BaseController设置来调用操作ping:
namespace :api, defaults: { format: 'json' } do
match '/ping' => 'base#ping'
end
但是它总是给我一个NameError
uninitialized constant Base
。我想它正在尝试寻找一个不存在的称为Base的模型,因此,我不知道如何设置到 Controller 的正确路由。我的BaseController的内容如下:
class Api::BaseController < ApplicationController
load_and_authorize_resource
respond_to :json
def ping
respond_with({ :status => 'OK' })
end
end
作为额外的信息:
BaseController
只是其他 Controller 要继承的父 Controller 。其他是足智多谋的 Controller ,并具有相关的模型谢谢。
最佳答案
当在路由周围放置一个 namespace 时,它将在该 namespace 内寻找 Controller 。
因此,在您的情况下,它将寻找一个名为Api::BaseController的 Controller ,该 Controller 通常存储在app/controllers/api/base_controller.rb中。这是您的 Controller 的设置方式吗?
有关更多详细信息,请参见此处:http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing
编辑:
我不认为没有找到问题的 Controller 。由于您在 Controller 中调用load_and_authorize_resource
导致了该错误。 CanCan使用 Controller 名称尝试加载资源。
如果没有用于 Controller 的模型,请调用authorize_resource :class => false
。
有关更多详细信息,请参见bottom of this page。
关于ruby-on-rails - rails 中无模型的 Controller 的布线3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835764/