我一直在使用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/