неинициализированная константа Api
Я все еще новичок относительно рубинов на рельсах, и я пытаюсь создать простой API, но я столкнулся с этой ошибкой: "uninitialized constant 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
Каталог проектов:
Я также пробовал этот подход и изменил структуру проекта на:
Кроме того, я включил: config.eager_load = true После этого я получил следующую ошибку:
'block in load_missing_constant': неинициализированная константа Api :: V1 :: BaseController (NameError)
Эта ошибка, потому что module Api
не определен раньше, я думаю, если бы вы сделали это, это сработает. от ответа здесь
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
Надеюсь, поможет.
Попробуйте это в своем контроллере идей
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
Если вы находитесь в среде разработки, загружаемая загрузка по умолчанию отключена, что может быть исправлено путем включения config.eager_load = true
загрузки (изменение в config.eager_load = true
в config/development.rb
). Нежелательная загрузка позволит загружать все приложение Rails при запуске сервера (что немного медленнее), но устранит проблему, поскольку этот файл будет загружен.