首页 > 解决方案 > TypeError(没有将 nil 隐式转换为字符串) ruby​​ on rails 5

问题描述

所以我有一个接受 JSON 作为有效负载的控制器

def create
     @tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))
    if @tournoi.save
      redirect_to root_url
        flash[:success] = "Your tournament bracket has been validated!"

json 来自可编辑的 js 图,我使用 XMLHttpRquest 和 formData 保存 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", true);
  request.send(formData);
                    }

JSON已成功插入我的控制器,我从我的tournois控制器重定向到我的create方法上的TypeError登录页面,我知道我的有效负载在保存之前为零,我不知道为什么我声明的方式@tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))不是保证从零到有效负载的转换..

标签: ruby-on-railsjsonxmlhttprequest

解决方案


您将有效负载 json 提交到 rails 后端的方式错误。所以params不是json,它是json字符串你可以试试去掉这个

var json = JSON.stringify(tojs); 

从代码行,并直接将 tojs 添加到 formdata

formData.append("payload", tojs);

推荐阅读