Как мне сделать 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