Rails JSONAPI :: Ресурсы сериализации ресурсов - PullRequest
0 голосов
/ 27 октября 2018

У меня есть Grape API с пространством имен :admin и ресурсом езды, весь путь равен http://localhost:3000/api/admin/trips

module Admin
  class Base < API::Core
    namespace :admin do
      before { authenticate_admin! }

      resources :rides do
        mount TripsAPI
      end
    end
  end
end

module Admin
  class TripsAPI < Base
    desc 'Returns all rides grouped by user ordered by date ascending'
    get do
      Ride.order(date: 'asc').group_by(&:user)
    end

    # ...
  end
end

Я хотел бы вернуть структуру данных следующим образом:

data: {
  [
   {email: '...', first_name: '...', rides: [ride1, ride2, ...]},
   {email: '...', first_name: '...', rides: [ride1, ride2, ...]}
  ]
}

или аналогичный, легко потребляемый на передней панели.Я хочу, чтобы все поездки были сгруппированы по пользователям и упорядочены по возрастанию, более конкретно.Как я могу получить только пару атрибутов из пользовательского ресурса и использовать его как пользовательский интерфейс?Я попытался использовать JSONAPI::Resources, у меня есть RideResource и UserResource, однако, если я запрашиваю конечную точку, он возвращает все атрибуты, поэтому он не работает.Я знаю, что могу просто проанализировать данные и создать ответ вручную в Ruby, но мне было интересно, есть ли способ добиться этого с помощью какого-либо сериализатора.

class RideResource < JSONAPI::Resource
  attributes :start_address
  belongs_to :user
end

Должен ли я что-нибудь поместить в routes.rb?Теперь мои маршруты выглядят так:

mount API::Core => '/'

Я также пытался распределить ресурсы по именам с помощью admin, но это не работает.

app / resources / admin /ride_resource.rb

module Admin
  class RideResource < JSONAPI::Resource
    attributes :start_address

    belongs_to :user
  end
end

Буду признателен за любые советы, так как не могу найти хорошую документацию, как это сделать.Должен ли я использовать какой-нибудь другой драгоценный камень, совместимый с Grape?

...