Я пытался заставить мой интерфейс отправить объект JSON с набором данных в мою базу данных. Используя Postgres, существует специальная миграция, которая обрабатывает JSON как «полезную нагрузку»:
class CreateTournois < ActiveRecord::Migration[5.1]
def change
create_table :tournois do |t|
t.json 'payload'
t.timestamps
end
end
end
Используя xmlhttp
, я отправляю свой JSON для модели:
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", "application/json", true);
request.send(formData);
}
И я использую базовый тег формы:
<%= form_for Tournoi.new do |f| %>
<button id="SaveButton" onclick="save()">Save</button>
<% end %>
У моего контроллера, кажется, есть некоторые проблемы:
def create
if @tournoi.nil?
@tournoi = Tournoi.new(payload: JSON.parse(params['payload']))
@tournoi.save
redirect_to malesingle_url
else
redirect_to root_url
end
end
Содержимое моего объекта JSON вставляется в модель, и изменения сохраняются в данных, но я перенаправлен на страницу с ошибкой даже после внесения изменения.
Я получаю эту ошибку в строке 8 @tournoi = Tournoi.new(payload: JSON.parse(params['payload']))
.:
TypeError нет неявного преобразования nil в String
Как я могу получить параметры, принятые моим контроллером?
Я не знаю, уместно ли это, но я использую библиотеку GoJs, для этого вот строка, где инициализируется myDiagram:
var $ = go.GraphObject.make;
myDiagram =
$(go.Diagram, "myDiagramDiv", {
initialContentAlignment: go.Spot.Center, // center the content
"textEditingTool.starting": go.TextEditingTool.SingleClick,
"textEditingTool.textValidation": isValidScore,
layout: $(go.TreeLayout, { angle: 180 }),
"undoManager.isEnabled": true
});
// validation function for editing text
function isValidScore(textblock, oldstr, newstr) {
if (newstr === "") return true;
var num = parseInt(newstr, 10);
return !isNaN(num) && num >= 0 && num <= 1;
}