我没有使用继电器。
我已经阅读了一些教程。许多人使用这种方式进行突变:
应用程序/graphql/graphql_tutorial_schema.rb
GraphqlTutorialSchema = GraphQL::Schema.define do
query(Types::QueryType)
mutation(Types::MutationType)
end
应用程序/graphql/resolvers/create_link.rb
class Resolvers::CreateLink < GraphQL::Function
argument :description, !types.String
argument :url, !types.String
type Types::LinkType
def call(_obj, args, _ctx)
Link.create!(
description: args[:description],
url: args[:url],
)
end
end
最后他们有:
应用程序/graphql/types/mutation_type.rb
Types::MutationType = GraphQL::ObjectType.define do
name 'Mutation'
field :createLink, function: Resolvers::CreateLink.new
end
所以他们正在使用GraphQL::Function
.
这是要走的路吗?如果我不使用 Relay,这只是唯一的方法吗?
如果我想要所有link
操作的唯一文件(CRUD)怎么办?
其他教程(http://tech.eshaiju.in/blog/2017/05/15/graphql-mutation-query-implementation-ruby-on-rails/)使用这个:
应用程序/graphql/mutations/comment_mutations.rb
module CommentMutations
Create = GraphQL::Relay::Mutation.define do
name "AddComment"
# Define input parameters
input_field :articleId, !types.ID
input_field :userId, !types.ID
input_field :comment, !types.String
# Define return parameters
return_field :article, ArticleType
return_field :errors, types.String
resolve ->(object, inputs, ctx) {
article = Article.find_by_id(inputs[:articleId])
return { errors: 'Article not found' } if article.nil?
comments = article.comments
new_comment = comments.build(user_id: inputs[:userId], comment: inputs[:comment])
if new_comment.save
{ article: article }
else
{ errors: new_comment.errors.to_a }
end
}
end
end
和app/graphql/mutations/mutation_type.rb
MutationType = GraphQL::ObjectType.define do
name "Mutation"
# Add the mutation's derived field to the mutation type
field :addComment, field: CommentMutations::Create.field
end
所以我还可以添加:
MutationType = GraphQL::ObjectType.define do
name "Mutation"
field :addComment, field: CommentMutations::Create.field
field :updateComment, field: CommentMutations::Update.field
field :deleteComment, field: CommentMutations::Delete.field
end
但这仅适用于Create = GraphQL::Relay::Mutation.define
:我没有使用 Relay!
在您的文档中,我找不到与此问题相关的任何内容。
我必须始终使用 GraphQL::Functions?
或者也许我可以这样使用它:
MutationType = GraphQL::ObjectType.define do
name "Mutation"
field :addComment, field: CommentMutations::Create
field :updateComment, field: CommentMutations::Update
field :deleteComment, field: CommentMutations::Delete
end
并有这个(代码是一个例子):
module Mutations::commentMutations
Createcomment = GraphQL::ObjectType.define do
name "Createcomment"
input_field :author_id, !types.ID
input_field :post_id, !types.ID
return_field :comment, Types::commentType
return_field :errors, types.String
resolve ->(obj, inputs, ctx) {
comment = comment.new(
author_id: inputs[:author_id],
post_id: inputs[:post_id]
)
if comment.save
{ comment: comment }
else
{ errors: comment.errors.to_a }
end
}
end
Updatecomment = GraphQL::ObjectType.define do
name "Updatecomment"
input_field :author_id, !types.ID
input_field :post_id, !types.ID
return_field :comment, Types::commentType
return_field :errors, types.String
resolve ->(obj, inputs, ctx) {
comment = comment.new(
author_id: inputs[:author_id],
post_id: inputs[:post_id]
)
if comment.update
{ comment: comment }
else
{ errors: comment.errors.to_a }
end
}
end
end
这是另一种方式吗?