неинициализированная константа Api

87
9

Я все еще новичок относительно рубинов на рельсах, и я пытаюсь создать простой 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

Каталог проектов:

project tree

Ошибка сервера: enter image description here

Я также пробовал этот подход и изменил структуру проекта на: Directorie's updated

Кроме того, я включил: config.eager_load = true После этого я получил следующую ошибку:

'block in load_missing_constant': неинициализированная константа Api :: V1 :: BaseController (NameError)

спросил(а) 2021-01-19T17:46:48+03:00 2 месяца, 3 недели назад
1
Решение
130

Эта ошибка, потому что 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

Надеюсь, поможет.

ответил(а) 2021-01-19T17:46:48+03:00 2 месяца, 3 недели назад
44

Попробуйте это в своем контроллере идей

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

ответил(а) 2021-01-19T17:46:48+03:00 2 месяца, 3 недели назад
44

Если вы находитесь в среде разработки, загружаемая загрузка по умолчанию отключена, что может быть исправлено путем включения config.eager_load = true загрузки (изменение в config.eager_load = true в config/development.rb). Нежелательная загрузка позволит загружать все приложение Rails при запуске сервера (что немного медленнее), но устранит проблему, поскольку этот файл будет загружен.

ответил(а) 2021-01-19T17:46:48+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема