【问题标题】:Passing json object to db as 'payload' -rails postgrel将 json 对象作为“有效负载”-rails postgres 传递给 db
【发布时间】:2018-10-06 02:03:13
【问题描述】:

我一直在使用 gojs 库进行一些工作,该库可以让您生成图表,从锦标赛括号到家谱等。

我正在使用保存功能通过 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);
                }

我的控制器是在将有效负载解析为参数之后的一组操作。 定义创建

   @tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))
      if @tournoi.save
        redirect_to  malesingle_url

我什至使用序列化来避免将对象传递给模型时出现任何问题:

class Tournoi < ApplicationRecord
  serialize :payload, JSON
end

感谢 postgrel on rails,我的模型设置为将 json 对象作为 'payload' 接受到数据中。

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 对象作为 payload 通过参数传递,它被插入到 tournois 表中,然后提交到数据库中。 我得到一个 TypeError(没有将 nil 隐式转换为字符串):app/controllers/tournois_controller.rb:7:in create 单击保存按钮后,我的浏览器向我显示一个动作控制器异常,其中**没有将 nil 隐式转换为字符串**突出显示 @tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))

在检查我的页面时,我在我的 javascript 控制台上进行控制台警告不推荐使用突变事件。请改用 MutationObserver。 我上网四处看看,以了解为什么我收到此消息,他们都提到了 dom 修改,我试图通过将 json 对象分配给数据来执行此操作,但我不理解的是在我的终端上它表明我的对象已保存,但出现错误。对我来说真的没有任何意义。

【问题讨论】:

  • 这些都有效吗? request.send(JSON.stringify(tojs)) 或者如果它没有自动映射 request.send({payload: JSON.stringify(tojs)})
  • @Nope 我在request.send(JSON.stringify(tojs)) 上得到一个TypeError,在request.send({payload: JSON.stringify(tojs)}) 上得到一个语法错误,并且没有任何东西插入到我的数据库中

标签: javascript ruby-on-rails json postgresql dom


【解决方案1】:

使用@tournoi = Tournoi.new(payload: JSON.parse(params[:payload])) 时总是会引发错误,TypeError 是专门在 JSON.parse(params[:payload]) 上引发的。 所以只需修改方法创建

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

不解析 params 将保存有效负载,但会保存另一个 payload nil

的 tournoi

我需要做的就是在我的模型中添加一个验证,以避免 Tournoi 有一个 nil 有效载荷要保存:

class Tournoi < ApplicationRecord
  validates :payload, presence: true, allow_nil: false

这样就完成了工作:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多