gpt4 book ai didi

ruby-on-rails - Ruby graphql 如何定义不是 Active Record 的对象类型?

转载 作者:行者123 更新时间:2023-12-05 02:05:43 25 4
gpt4 key购买 nike

我想创建一个不在 ActiveRecord 中的 MentionType。当查询 SummaryCommentType 时,我想用它返回 MentionType。但我不知道该怎么做。

我是 graphql 的新手。对不起我的英语。

这是我的代码

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

最佳答案

从 GraphQL 查询返回的对象不需要是 ActiveRecord 对象,它们只需要映射到您的字段名称的方法,或者您的字段需要具有可以从对象中提取所需数据的方法。

这是一个使用几种不同方式转换为类型的示例:

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 {
mentions {
id
name
nameUpper
}
}

结果:

{
"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"
}
]
}
}

关于ruby-on-rails - Ruby graphql 如何定义不是 Active Record 的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63275896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com