rails 3中没有模型的控制器的路由
Posted
技术标签:
【中文标题】rails 3中没有模型的控制器的路由【英文标题】:Route for a controller without model in rails 3 【发布时间】:2012-10-01 21:26:44 【问题描述】:我有一个名为 BaseController
的控制器,它从 ApplicationController
继承,但没有关联模型,但它有 ping
方法,该方法只响应一条消息以通知一切正常。
我正在尝试通过 BaseController 在我的 routes.rb 文件中设置它来调用操作 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
只是其他控制器继承的父控制器。其他的是足智多谋的控制器,并有相关的模型
谢谢。
【问题讨论】:
【参考方案1】:在你的 routes.rb 中试试这个 map.resources :base, :collection=> :ping=>:get
【讨论】:
【参考方案2】:当您在路由周围放置命名空间时,它会在该命名空间中查找控制器。
因此,在您的情况下,它将寻找一个名为 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。
【讨论】:
您可以将BaseController
的内容添加到问题中吗?
感谢您的关注。已添加 BaseController 内容。
更新了答案,我认为这是由于您使用 CanCan 的方式。
非常感谢,这正是问题所在。
不用担心,这表明在您的问题中提供尽可能多的信息总是好的。 :D 随意选择这个作为答案【参考方案3】:
请试试这个:
在你的 routes.rb 中添加这个
resources :base
【讨论】:
谢谢,但仍然是 NameError,但我没有基本模型,只是 api 的特定控制器。从 BaseController 继承的控制器工作正常,但它们具有关联的模型。我的意思是,ping 路由不一定是资源丰富的路由。以上是关于rails 3中没有模型的控制器的路由的主要内容,如果未能解决你的问题,请参考以下文章