Использование Ransack в приложении только на Rails 5 API

Я недавно начал работать над приложением только на Rails 5 API и включил jsonapi-resources так же как ransack легко фильтровать результаты для любого запроса. По умолчанию, jsonapi-resources обеспечивает базовую функциональность CRUD, но для того, чтобы вставить параметры поиска для ransack Мне нужно переписать метод индекса по умолчанию в моем контроллере:

class CarsController < JSONAPI::ResourceController

  def index
    @cars = Car.ransack(params[:q]).result
    render json: @cars
  end

end

Теперь это работает нормально, но больше не использует jsonapi-resources генерировать вывод JSON, что означает, что вывод изменился с:

# ORIGINAL OUTPUT STRUCTURE
{"data": [
  {
    "id": "3881",
    "type": "cars",
    "links": {
      "self": ...
    },
    "attributes": {
      ...
    }
  }]
}

Для вывода по умолчанию Rails JSON:

[{
  "id": "3881",
  "attr_1": "some value",
  "attr_2": "some other value"
}]

Как я могу сохранить исходную структуру вывода при исправлении метода индекса в этом контроллере?

1 ответ

Решение

Попробуйте использовать гем https://github.com/tiagopog/jsonapi-utils. В вашем случае проблема будет решена следующим образом:

class CarsController < JSONAPI::ResourceController
  include JSONAPI::Utils

  def index
    @cars = Car.ransack(params[:q]).result
    jsonapi_render json: @cars
  end
end
Другие вопросы по тегам