Поэтому я использую GraphQL с Ruby on Rails и пытаюсь заставить работать GraphiQL, но в итоге получаю NameError: неинициализированную константу UserMutations.В моем mutation_type.rb у меня есть следующее:
Types::MutationType = GraphQL::ObjectType.define do
name 'Mutation'
field :signUp, field: UserMutations::SignUp
field :updateUser, field: UserMutations::Update
field :changePassword, field: UserMutations::ChangePassword
field :signIn, field: AuthMutations::SignIn
field :removeToken, field: AuthMutations::RemoveToken
end
Тогда в моей папке мутаций для user_mutations.rb у меня есть:
module Mutations::UserMutations
SignUp = GraphQL::ObjectType.define do
name 'signUp'
description 'Signing up a user'
input_field :first_name, types.String
input_field :last_name, types.String
input_field :email, types.String
input_field :password, types.String
input_field :password_confirmation, types.String
return_field :user, Types::UserType
return_field :messages, types[FieldErrorType]
resolve lambda(obj, inputs, ctx) do
user = User.new(inputs.to_params)
if user.save
user.update_tracked_fields(ctx[:request])
user.generate_access_token!
{ user: user }
else
{ messages: user.fields_errors }
end
end
end
Update = GraphQL::ObjectType.define do
name 'updateUser'
description 'Updating a user account'
input_field :first_name, types.String
input_field :last_name, types.String
input_field :email, types.String
return_field :user, Types::UserType
return_field :messages, types[FieldErrorType]
resolve lambda { |_obj, inputs, ctx|
current_user = ctx[:current_user]
if current_user.update(inputs.to_params)
{ user: current_user }
else
{ messages: current_user.fields_errors }
end
}
end
ChangePassword = GraphQL::ObjectType.define do
name 'changePassword'
description 'Changing the user password'
input_field :password, types.String
input_field :password_confirmation, types.String
input_field :current_password, types.String
return_field :user, Types::UserType
return_field :messages, types[FieldErrorType]
resolve lambda { |_obj, inputs, ctx|
params_with_password = inputs.to_h.symbolize_keys
current_user = ctx[:current_user]
if current_user.update_with_password(params_with_password)
{ user: current_user }
else
{ messages: current_user.fields_errors }
end
}
end
end
Первоначально я имел для user_mutations.rb:
module UserMutations
SignUp = GraphQL::Relay::Mutations.define do
Но выяснилось, что мы используем не React, а Vue.Как правильно получить файл mutation_type, получить информацию из файла user_mutations?
Редактировать: я также попытался в моем файле mutation_type следующее:
Types::MutationType = GraphQL::ObjectType.define do
name 'Mutation'
field :signUp, Mutations: UserMutations::SignUp.field
И
field :signUp, field: UserMutations::SignUp.field
Та же проблема с обоими.