Получение `неинициализированной константы JsonapiCompliable :: Adapters :: ActiveRecord)` после добавления jsonapi-suite - PullRequest
0 голосов
/ 15 мая 2018

Как мне сделать JsonapiCompliable :: Adapters :: ActiveRecord доступным?

$ curl localhost: 3001 / groups

Получает это:

ActionController::RoutingError (uninitialized constant JsonapiCompliable::Adapters::ActiveRecord):

app/resources/application_resource.rb:9:in `<class:ApplicationResource>'
app/resources/application_resource.rb:5:in `<main>'
app/resources/group_resource.rb:1:in `<main>'
app/controllers/groups_controller.rb:3:in `<class:GroupsController>'
app/controllers/groups_controller.rb:1:in `<main>'

Я добавил этот код в свой существующий проект Rails 5.2.0:

Gemfile

gem 'jsonapi_suite', '~> 0.7'
gem 'jsonapi-rails', '~> 0.3.0'
gem 'jsonapi_swagger_helpers', '~> 0.6', require: false
gem 'jsonapi_spec_helpers', '~> 0.4', require: false
gem 'kaminari', '~> 1.0'

ApplicationController

 class ApplicationController < ActionController::API
+  # Bootstrap jsonapi_suite with relevant modules
+  include JsonapiSuite::ControllerMixin
+
+  register_exception JsonapiCompliable::Errors::RecordNotFound,
+    status: 404
+
+  # Catch all exceptions and render a JSONAPI-compliable error payload
+  # For additional documentation, see https://jsonapi-suite.github.io/jsonapi_errorable
+  rescue_from Exception do |e|
+    handle_exception(e)
+  end
+

GroupsController

class GroupsController < ApplicationController
  jsonapi resource: GroupResource

  strong_resource :group
  before_action :apply_strong_params, only: [:create, :update]

  def index
    groups = Group.all
    render_jsonapi(groups)
  end

  def show
    scope = jsonapi_scope(Group.where(id: params[:id]))
    instance = scope.resolve.first
    raise JsonapiCompliable::Errors::RecordNotFound unless instance
    render_jsonapi(instance, scope: false)
  end

  def create
    group, success = jsonapi_create.to_a

    if success
      render_jsonapi(group, scope: false)
    else
      render_errors_for(group)
    end
  end

  def update
    group, success = jsonapi_update.to_a

    if success
      render_jsonapi(group, scope: false)
    else
      render_errors_for(group)
    end
  end

  def destroy
    group, success = jsonapi_destroy.to_a

    if success
      render json: { meta: {} }
    else
      render_errors_for(group)
    end
  end
end

app / resources / group_resource.rb

   class GroupResource < ApplicationResource
     type :groups
   end

Отладка из консоли

[4] pry(main)> JsonapiCompliable::Adapters
=> JsonapiCompliable::Adapters
[5] pry(main)> JsonapiCompliable::Adapters::ActiveRecord
NameError: uninitialized constant JsonapiCompliable::Adapters::ActiveRecord

Итак, почему JsonapiCompliable :: Adapters :: ActiveRecord недоступен?

app / resources / application_resource.rb

class ApplicationResource < JsonapiCompliable::Resource
  use_adapter JsonapiCompliable::Adapters::ActiveRecord
end

1 Ответ

0 голосов
/ 15 мая 2018

Добавить

require 'jsonapi_compliable/adapters/active_record'

до config/initializers/jsonapi.rb. Вы увидите это, если запустите генераторы из Quickstart.

...