active_model_serializersで関連テーブルを扱う

テーブル
class Country < ApplicationRecord
  has_many :regions
end
class Region < ApplicationRecord
  has_many :articles
  belongs_to :country
end
class Article < ApplicationRecord
  belongs_to :region
end


gemをインストール
gem 'active_model_serializers'


config/initializersams.rbを作成し以下を記載
ActiveModelSerializers.config.default_includes = '**'


countryを主体にする場合

serializerファイルを作成

bundle exec rails g serializer country


serializerファイルを記載

class CountrySerializer < ActiveModel::Serializer
  attributes :id, :name
  has_many :regions

  class RegionSerializer < ActiveModel::Serializer
    attributes :id, :name
    has_many :articles

    class ArticleSerializer < ActiveModel::Serializer
      attributes :id, :title, :description
    end
  end
end


articleを主体にする場合

serializerファイルを作成

bundle exec rails g serializer article


serializerファイルを記載

class ArticleSerializer < ActiveModel::Serializer
  attributes :id, :title, :description
  has_one :region

  class RegionSerializer < ActiveModel::Serializer
    attributes :id, :name
    has_one :country

    class CountrySerializer < ActiveModel::Serializer
      attributes :id, :name
    end
  end
end

※belongs_toを使うと上手く表示さない


参考記事:
ActiveModel::Serializersでネストされたリソースを扱う - Qiita
Active Model Serializersを試してみる - Qiita