将json对象作为有效负载传递给模型

时间:2018-04-18 16:55:13

标签: javascript ruby-on-rails xmlhttprequest ruby-on-rails-5

我的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(当分配属性时,你必须传递一个哈希作为一个参数。)这使我的迁移回滚。

我知道错误来自我的控制器,但我似乎无法找到我出错的地方,或者是否有遗漏或错误的顺序。

1 个答案:

答案 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]))