【问题标题】:TypeError (no implicit conversion of nil into String) ruby on rails 5TypeError(没有将 nil 隐式转换为字符串) ruby​​ on rails 5
【发布时间】:2019-03-11 20:51:27
【问题描述】:

所以我有一个接受 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])) 不保证从零到有效负载的转换..

【问题讨论】:

  • 你可以在保存之前用 byebug 放置刹车点或撬动以检查@tournoi 的值吗?
  • @Nezir 从未使用过 pry 或 byebug 不知道它是如何工作的,我会调查一下
  • 为什么不将整个请求以 JSON 格式发送?对于一个简单的问题,这似乎是一个非常不稳定的解决方案。
  • 如果您使用的是 rails 5.2,它非常简单,默认情况下只需要在 tournoi.save byebug 行之前编写并刷新页面,它将在该行停止。比在控制台中写 tournoi ,它会向你展示一个内容..但它很好地阅读使用它将对你将来非常有用
  • @max 好吧,我正在使用我所知道的知识来处理 json 作为有效负载,你能告诉我以 JSON 格式发送请求吗

标签: ruby-on-rails json xmlhttprequest


【解决方案1】:

您将有效负载 json 提交到 rails 后端的方式错误。所以params不是json,它是json字符串 您可以尝试删除此

var json = JSON.stringify(tojs); 

代码中的一行,直接将tojs添加到formdata中

formData.append("payload", tojs);

【讨论】:

  • 我仍然在@tournoi = Tournoi.new(payload: JSON.parse(params[:payload])) 上得到一个 TypeError 没有 nil 的隐式转换
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多