[RUBY] Gem ~ active_model_serializers ~

offiziell

https://github.com/rails-api/active_model_serializers/tree/v0.10.6/docs

Erstellen eines Serializers

be rails g serializer api::v1::articles_preview_serializer

Erstellte Datei

app/serializers/api/v1/articles_preview_serializers.rb

class Api::V1::ArticlesPreviewSerializer < ActiveModel::Serializer
  #Geben Sie den Wert an, den Sie ausgeben möchten
  attributes :id, :title, :updated_at
end

Geben Sie die Ausgabe-ID, den Titel und update_at an.

Regler

app/controllers/api/v1/articles_controllers.rb

module Api::V1
  class ArticlesController < BaseApiController
    def index
      articles = Article.all.order(updated_at: "DESC")
			#Wenn es mehrere Antwortwerte gibt, jeweils_Verwenden Sie den Serializer.
      render json: articles, each_serializer: Api::V1::ArticlesPreviewSerializer
    end
  end
end

Machen Sie es die gleiche hierarchische Struktur wie der Serializer.

Geben Sie an, dass die erstellten Artikel in aufsteigender Reihenfolge in aktualisierter Reihenfolge vorliegen.

Base_api_controllers.rb in derselben Hierarchie

class Api::V1::BaseApiController < ApplicationController
end

Request spec

Erstellen Sie vorerst Dummy-Daten und beziehen Sie sich darauf.

spec/requests/api/v1/article_request_spec.rb

require 'rails_helper'

RSpec.describe "Api::V1::Articles", type: :request do
  describe " GET /api/v1/article " do
    subject { get(api_v1_articles_path) }

    before { create(:article, updated_at: 3.days.ago ) }
    before { create(:article) }
    before { create(:article, updated_at: 1.days.ago ) }
    it "Sie können eine Liste der Artikel erhalten" do
      subject
    end
  end
end

Mehr zu Anforderungsspezifikation zu einem späteren Zeitpunkt.

Ausführungsergebnis

[1] pry(#<RSpec::ExampleGroups::ApiV1Articles::GETApiV1Article>)> res = JSON.parse(response.body)
=> [{"id"=>56, "title"=>"Consequuntur quia corporis perspiciatis.", "updated_at"=>"2020-10-17T22:19:32.120Z"},
 {"id"=>57, "title"=>"Molestiae tempore recusandae qui.", "updated_at"=>"2020-10-16T22:19:32.122Z"},
 {"id"=>55, "title"=>"Consectetur nam odio voluptatibus.", "updated_at"=>"2020-10-14T22:19:31.192Z"}]

Fügen Sie UserSerializer hinzu

class Api::V1::UserSerializer < ActiveModel::Serializer
  #Geben Sie den Wert an, den Sie ausgeben möchten
  attributes :id, :name, :email
end

Behoben ArticlesPreviewSerializer

class Api::V1::ArticlesPreviewSerializer < ActiveModel::Serializer
  #Geben Sie den Wert an, den Sie ausgeben möchten
  attributes :id, :title, :updated_at
  belongs_to :user, serializer: Api::V1::UserSerializer
end

Ausführungsergebnis

[1] pry(#<RSpec::ExampleGroups::ApiV1Articles::GETApiV1Article>)> res = JSON.parse(response.body)
=> [{"id"=>59,
  "title"=>"Esse facere cum rerum.",
  "updated_at"=>"2020-10-19T00:06:27.375Z",
  "user"=>{"id"=>69, "name"=>"Eduardo Kohler Haley", "email"=>"[email protected]"}},
 {"id"=>60,
  "title"=>"Cumque aut repudiandae numquam.",
  "updated_at"=>"2020-10-18T00:06:27.377Z",
  "user"=>{"id"=>70, "name"=>"Collen Stark Brakus", "email"=>"[email protected]"}},
 {"id"=>58,
  "title"=>"Corporis molestiae dolor odit.",
  "updated_at"=>"2020-10-16T00:06:26.556Z",
  "user"=>{"id"=>68, "name"=>"Fr. Pauline Sporer Greenfelder", "email"=>"[email protected]"}}]

Recommended Posts

Gem ~ active_model_serializers ~
Rubin und Edelstein