確認環境
$ bundle exec ruby --version
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-darwin19]
$ bundle exec rails --version
Rails 6.0.4.6
$ bundle info graphql
* graphql (2.0.13)
Summary: A GraphQL language and runtime for Ruby
Homepage: https://github.com/rmosolgo/graphql-ruby
Path: /Users/xxxxx/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/graphql-2.0.13
データ準備
テーブル定義確認
$ rails db
sqlite> .schema posts
CREATE TABLE IF NOT EXISTS "posts" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "description" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);
検証コードを実装
app/graphql/types/post_type.rb
# frozen_string_literal: true
module Types
class PostType < Types::BaseObject
global_id_field :id
field :title, String
field :created_at, GraphQL::Types::ISO8601DateTime, null: false
field :updated_at, GraphQL::Types::ISO8601DateTime, null: false
end
end
app/graphql/sample6_schema.rb
class Sample6Schema < GraphQL::Schema
mutation(Types::MutationType)
query(Types::QueryType)
# Relay-style Object Identification:
def self.id_from_object(object, _type, _context)
"#{_type}_#{object.id}"
end
end
app/graphql/types/query_type.rb
module Types
class QueryType < Types::BaseObject
field :posts, [Types::PostType], null: false
def posts
Post.all.limit(3)
end
end
end
graphiql でクエリを発行する
query {
posts {
id
title
}
}
取得結果
{
"data": {
"posts": [
{
"id": "Types::PostType_2",
"title": "title_0"
},
{
"id": "Types::PostType_3",
"title": "title_1"
},
{
"id": "Types::PostType_4",
"title": "title_2"
}
]
}
}