我的rails应用程序有问题。 一旦他们完成编辑,我就让用户提交并填写括号。 :
<%= form_for Tournoi.new do |f| %>
<button id="SaveButton" onclick="save()">Save</button>
<% end %>
使用XMLHttpRequest我将json对象发送到我的db:
function save() {
var data = {};
var tojs = myDiagram.model.toJSON();
data.payload = tojs;
//var parsed_json = JSON.parse(data);
var json = JSON.stringify(data);
myDiagram.isModified = false;
var request = new XMLHttpRequest();
request.onload = callback;
request.open("post", "http://localhost:3000/malesingle", true);
request.setRequestHeader("Content-Type", "application/json");
request.send(json)
我的迁移设置方式是它接受json对象作为有效负载:
class CreateTournois < ActiveRecord::Migration[5.1]
def change
create_table :tournois do |t|
t.json 'payload'
t.timestamps
end
end
end
我的tournois控制器是我认为我遇到一些困难的地方:
def create
@tournoi = Tournoi.new params[:payload]
if @tournoi.save
redirect_to root_url
flash[:success] = "Your tournament bracket has been validated!"
redirect_to @tournoi
else
redirect_to malesingle_url
end
end
这是每次我尝试提交括号时的问题,我的json对象stringify的内容出现在我的终端上,POST参数似乎经过,我的有效负载参数成为我的json对象的内容但由于某种原因我得到一个Argument Error(当分配属性时,你必须传递一个哈希作为一个参数。)这使我的迁移回滚。
我知道错误来自我的控制器,但我似乎无法找到我出错的地方,或者是否有遗漏或错误的顺序。
答案 0 :(得分:0)
Since your Rails endpoint expects form data, send your JSON like this:
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);
Then, assuming you're using Postgres which supports fields of type JSON, the "payload" param needs to be parsed into a hash and the field name needs to be specified:
Tournoi.new(payload: JSON.parse(params[:payload]))