Использование Ruby с GraphQL решает проблему NameError: неинициализированная константа UserMutations? - PullRequest
0 голосов
/ 07 июня 2018

Поэтому я использую 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

Та же проблема с обоими.

1 Ответ

0 голосов
/ 15 июня 2019

Мне все еще интересно, что внешний интерфейс React или Vue имеет отношение к вашему бэкэнду.

У вас проблема с пространством имен, Rails ожидает найти имя файла, котороесоответствует user_mutations.rb ошибка NameError: uninitialized constant UserMutations, возникшая из-за того, что она не может его найти, вам просто нужно направить рельсы к расположению файла.

Я также использую GraphQL и следую за этим пространством имен в этомurl: https://mattboldt.com/2019/01/07/rails-and-graphql/

в любом случае попробуйте это:

field :signUp, field: Mutations::UserMutations::SignUp

ИЛИ

module Mutations
    class UserMutations # if it didn't work, try `< Types::MutationType`
        SignUp = GraphQL::ObjectType.define do
            # your SignUp block
        end
    end
end

ИЛИ Оба из вышеперечисленных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...