I want to create a MentionType which is not in ActiveRecord. And when query SummaryCommentType I want to return MentionType with it. But I dont know how to.
I am completely new for graphql. Sorry for my english.
Here is my code
module Types
class MentionType < Types::BaseObject
field :id, Integer, null: false
field :name, String, null: false
end
end
module Types
class SummaryCommentType < Types::BaseObject
field :id, Integer, null: false
field :summary_id, Integer, null: false
field :comment_status, Integer, null: false
field :curator_id, Integer, null: true
field :curator, CuratorType, null: true
field :total_like, Integer, null: true
field :total_dislike, Integer, null: true
field :comment_desc, String, null: true
field :parent_comment_key, Integer, null: true
field :created_at, GraphQL::Types::ISO8601DateTime, null: true
field :updated_at, GraphQL::Types::ISO8601DateTime, null: true
field :sub_comment_count, Integer, null: true
field :summary_comment_sticker, SummaryCommentStickerType, null: true
field :mention, [MentionType.graphql_definition], null:true do
argument :comment_id, Integer, required: true
end
def mention(comment_id:)
comment = SummaryComment.where(id: self.object.id)
# to do put logic here to query mention by comment
# ....
return mention
end
end
end
The objects returned from a GraphQL query don't need to be ActiveRecord objects, they just need methods that map to your field names, or your fields need to have methods that can extract the data needed from the object.
Here's an example that uses several different ways to cast to a type:
module Types
class MentionType < BaseObject
field :id, Integer, null: false
field :name, String, null: false
field :name_upper, String, null: false
def name_upper
if object.is_a?(Hash)
object[:name].upcase
else
object.name.upcase
end
end
end
end
module Types
class QueryType < Types::BaseObject
field :mentions, [MentionType], null: true
def mentions
[
Struct.new(:id, :name).new(1, 'Struct'),
OpenStruct.new(id: 2, name: 'OpenStruct'),
{ id: 3, name: 'Hash' },
CustomObject.new(id: 4, name: 'CustomObject'),
]
end
class CustomObject
def initialize(attrs)
@attrs = attrs
end
def id
@attrs[:id]
end
def name
@attrs[:name]
end
end
end
end
Query:
query {
mentions {
id
name
nameUpper
}
}
Result:
{
"data": {
"mentions": [
{
"id": 1,
"name": "Struct",
"nameUpper": "STRUCT"
},
{
"id": 2,
"name": "OpenStruct",
"nameUpper": "OPENSTRUCT"
},
{
"id": 3,
"name": "Hash",
"nameUpper": "HASH"
},
{
"id": 4,
"name": "CustomObject",
"nameUpper": "CUSTOMOBJECT"
}
]
}
}