Получение текста ошибки на клиенте, когда модель не сохраняется - PullRequest
4 голосов
/ 23 марта 2019

Я использую фреймворк Hyperstack.org, поэтому работаю с скомпилированным Opal кодом Ruby.Интеграция Hyperstack с Rails создает представление некоторых Моделей на клиенте, и у меня есть вопрос о проверке ошибок в ответе.

При сохранении модели с валидаторами, когда срабатывает один из валидаторов, я не могу получить полное сообщение об ошибке в ответе на обещание.

В этом коде:

@User.save(validate: true).then do |result|
      if result[:success]
        puts 'successs'
        mutate @open = false
      else
        result[:models].each do |response_model|
          puts "response_model.errors.class = #{response_model.errors.class}" #ActiveModel::Errors
          puts "response_model.errors.full_messages = #{response_model.errors.full_messages}" #nothing puts
        end
      end

Первый вывод возвращает #ActiveModel::Errors, но я, кажется, не могу использовать методы этой модели.

Я вижу тесты для этого: https://github.com/hyperstack-org/hyperstack/blob/a09bc601b3ad289c9f75156416ed39dff88059c9/ruby/hyper-model/spec/batch1/misc/errors_spec.rb#L340, поэтому я ожидаю, что это сработаети это должен быть я!

Кроме того, я заметил, что ответ JSON на обещание действительно включает сообщение об ошибке:

{
  "success" => false, "saved_models" => [
    [227154, "User", {
      "id" => 48,
      "first_name" => "ds",
      "last_name" => nil,
      "email" => nil,
      "image_src" => nil,
      "date_of_birth" => nil,
      "is_admin" => false,
      "is_female" => false,
      "is_enabled" => true,
      "created_at" => "2019-03-23T12:29:05.728Z",
      "updated_at" => "2019-03-23T12:29:05.728Z"
    }, {
      "last_name" => ["can't be blank"]
    }]
  ], "message" => "HyperModel saving records failed!", "models" => [ < User: 0x37752(0x37750)[errors {
    "last_name" => ["can't be blank"]
  }] > ]
}

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 24 марта 2019

Похоже, что вы столкнулись с ошибкой в ​​HyperModel с помощью метода full_messages. AFAIK все остальные методы будут работать нормально в вашем примере.

Если вы посмотрите на https://github.com/hyperstack-org/hyperstack/issues/143, есть исправление, которое нужно применить, если вам действительно нужно full_messages

...