Передача объекта json в db как 'полезная нагрузка' -rails postgrel - PullRequest
0 голосов
/ 25 апреля 2018

Я работал над чем-то, используя библиотеку gojs, которая позволяет создавать диаграммы, от турнирных скобок до генеалогических деревьев и т. Д.

Я использую функцию сохранения, чтобы отправить свойнабор данных для моей модели через formData ,

function save() {
      var tojs = myDiagram.model.toJSON();
      var json = JSON.stringify(tojs);

      var formData = new FormData();
      formData.append("payload", json);

  var request = new XMLHttpRequest();
  request.open("post", "http://localhost:3000/malesingle", true);
  request.send(formData);
                }

Мой контроллер как набор действий после разбора полезной нагрузки в params.def create

   @tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))
      if @tournoi.save
        redirect_to  malesingle_url

Я даже использовал сериализацию, чтобы избежать проблем при передаче объекта в модель:

class Tournoi < ApplicationRecord
  serialize :payload, JSON
end

моя модель настроена таким образом, чтобы принимать объект jsonв данные как 'полезная нагрузка' , благодаря postgrel на рельсах.

class CreateTournois < ActiveRecord::Migration[5.1]
  def change
    create_table :tournois do |t|
      t.json 'payload'
      t.timestamps
    end
  end
end

После сохранения tournoi следующее действие предполагается перенаправлением на другое представление, если @tournoi.save redirect_to malesingle_urlОбъект json передается через параметры как payload , он вставляется в таблицу tournois и затем фиксируется в базе данных.я получаю TypeError (без неявного преобразования nil в String): app / controllers / tournois_controller.rb: 7: при создании после нажатия кнопки сохранения мой браузер показывает мне исключение контроллера действий с **нет неявного преобразования nil в строку ** выделение @tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))

при проверке моей страницы i console на моей консоли javascript предупреждение Использование событий мутации не рекомендуется.Вместо этого используйте MutationObserver. Я пошел в Интернет, чтобы немного осмотреться, чтобы понять, почему я получаю это сообщение, все они упоминают модификацию dom, что я и пытаюсь сделать, назначив объекту json данные, о чем я не понимаюмой терминал показывает, что мой объект сохранен, но я получаю ошибку.просто не имеет никакого смысла для меня.

1 Ответ

0 голосов
/ 02 мая 2018

Ошибка всегда возникает при использовании @tournoi = Tournoi.new(payload: JSON.parse(params[:payload])), ошибка TypeError вызывается специально для JSON.parse (params [: payload]) . Таким образом, просто изменив метод , создайте :

def create
      if @tournoi = Tournoi.new(payload: params['payload'])
          @tournoi.save
.......

Не парсинг параметров сохранит полезную нагрузку, но сохранит еще один турне, который имеет полезную нагрузку ноль

все, что мне нужно сделать, это добавить проверку в моей модели, чтобы избежать турне, имеющего полезную нагрузку nil :

class Tournoi < ApplicationRecord
  validates :payload, presence: true, allow_nil: false

Вот оно и делает свою работу :) 1020 *

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