未初始化的常数Api

时间:2018-08-05 09:32:08

标签: ruby-on-rails ruby api

我仍然是有关Rails上红宝石的初学者,我正在尝试创建一个简单的API,但是我遇到了以下错误:“未初始化的常量Api”

ideas_controller.rb

module Api
 module V1
  class ItemsController < BaseController
    def index
     @ideas = Idea.all
     render json: @ideas
    end
  end
 end
end

routes.db

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :ideas  
    end
  end
end

application_controller.rb

   class ApplicationController < ActionController
 protect_from_forgery with: :null_session

end

base_controller.rb

   module Api
 module V1
class BaseController < ApplicationController
  respond_to :json
end
end

项目目录:

project tree

服务器错误: enter image description here

我也尝试过这种方法,并将项目的结构更改为: Directorie's updated

我还启用了:   config.eager_load = true 之后,出现以下错误:

“ load_missing_constant中的块”:未初始化的常量Api :: V1 :: BaseController(NameError)

3 个答案:

答案 0 :(得分:1)

如果您处于开发环境中,则默认情况下将禁用快速加载,可以通过打开快速加载(在config.eager_load = true中更改为config/development.rb来修复此问题)。渴望的加载将允许在服务器启动时加载整个Rails应用程序(速度稍慢),但由于将加载该文件,因此可以解决您的问题。

答案 1 :(得分:0)

此错误是因为之前没有定义module Api,我想如果您这样做就可以了。来自答案here

module Api
 module V1
  class IdeasController < ApplicationController
    def index
     @ideas = Idea.all
     render json: @ideas
    end
  end
 end
end

另一个解决方案可能是这样的:

module Api
 module V1
 end
end
class Api::V1::IdeasController < ApplicationController
  def index
   @ideas = Idea.all
   render json: @ideas
  end
end

希望有帮助。

答案 2 :(得分:0)

在您的想法控制器中尝试

module Api
 module V1
  class IdeasController < Api::V1::BaseController
   def index
    @ideas = Idea.all
    render json: @ideas
   end
  end
 end
end

并通过以下方式定义基本控制器

class Api::V1::BaseController < ApplicationController
 respond_to :json
end