我一直在使用gojs库进行一些工作,这个库可以让您生成图表,从锦标赛括号到家谱等等。。
我正在使用一个save函数通过formData将我的数据集提交到我的模型,

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);
                }

我的控制器是一组在将有效负载解析为params之后的操作。
定义创建
   @tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))
      if @tournoi.save
        redirect_to  malesingle_url

我甚至使用serialize来避免在将对象传递到模型时出现任何问题:
class Tournoi < ApplicationRecord
  serialize :payload, JSON
end

由于rails上的postgrel,我的模型被设置为接受json对象作为“负载”进入数据。
class CreateTournois < ActiveRecord::Migration[5.1]
  def change
    create_table :tournois do |t|
      t.json 'payload'
      t.timestamps
    end
  end
end

在保存tournoi之后,如果@tournoi.save redirect_to malesingle_url
json对象作为有效负载通过参数传递到tournois表中,然后提交到数据库中。
我得到一个TypeError(没有将nil隐式转换成字符串):app/controllers/tournois_controller.rb:7:in create
单击“保存”按钮后,浏览器显示一个操作控制器异常,其中**没有将nil隐式转换为字符串**突出显示@tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))
在检查javascript控制台上的页面i控制台时,不推荐使用变异事件的警告。改用MutationObserver。
我上网查看了一下,想知道为什么我得到这个消息,他们都提到了do m修改,我试图通过给数据分配一个json对象来完成这个任务,但我没有在终端上找到,这表明我的对象被保存了,但我得到了一个错误。只是对我来说没什么意义。

最佳答案

使用@tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))时始终会引发错误,TypeError是在JSON.parse(params[:payload])上特别引发的。
所以只要修改方法就可以创建:

def create
      if @tournoi = Tournoi.new(payload: params['payload'])
          @tournoi.save
.......

不解析参数将保存有效负载,但它将保存另一个有效负载为零的tournoi
我只需要在模型中添加一个验证,以避免tournoi的有效负载为零:
class Tournoi < ApplicationRecord
  validates :payload, presence: true, allow_nil: false

就这样完成了任务:)

关于javascript - 将JSON对象作为'payload'传递给数据库-rails postgres,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50024899/

10-11 05:27