【问题标题】:Route for a controller without model in rails 3rails 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 只是其他控制器继承的父控制器。其他的是足智多谋的控制器,并有相关的模型

谢谢。

【问题讨论】:

    标签: ruby-on-rails model controller routes


    【解决方案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 =&gt; false。

      有关详细信息,请参阅bottom of this page。

      【讨论】:

      • 您可以将BaseController 的内容添加到问题中吗?
      • 感谢您的关注。已添加 BaseController 内容。
      • 更新了答案,我认为这是由于您使用 CanCan 的方式。
      • 非常感谢,这正是问题所在。
      • 不用担心,这表明在您的问题中提供尽可能多的信息总是好的。 :D 随意选择这个作为答案
      【解决方案3】:

      请试试这个:

      在你的 routes.rb 中添加这个

      resources :base
      

      【讨论】:

      • 谢谢,但仍然是 NameError,但我没有基本模型,只是 api 的特定控制器。从 BaseController 继承的控制器工作正常,但它们具有关联的模型。我的意思是,ping 路由不一定是资源丰富的路由。
      猜你喜欢
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多