将json对象作为'payload'传递给db -rails postgrel

时间:2018-04-25 14:30:09

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

我一直在使用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);
                }

我的控制器是将有效负载解析为params之后的一组操作。 def create

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

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

class Tournoi < ApplicationRecord
  serialize :payload, JSON
end

我的模型设置方式是将json对象作为'payload'接受到数据中,这要归功于postgrel on rails。

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隐式转换为String):app / controllers / tournois_controller.rb:7:in create 单击“保存”按钮后,我的浏览器显示一个动作控制器异常,其中没有将nil隐式转换为字符串**突出显示@tournoi = Tournoi.new(payload: JSON.parse(params[:payload]))

在我的javascript控制台上检查我的控制台时,警告不推荐使用突变事件。请改用MutationObserver。 我上网看了一下,了解为什么我得到这个消息,他们都提到dom修改,这是我试图通过分配一个json对象数据,我不明白是在我的终端上显示我的对象保存,但我收到一个错误。对我来说真的没有任何意义。

1 个答案:

答案 0 :(得分:0)

使用@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

我需要做的就是在我的模型中添加验证,以避免保存具有 nil 有效负载的tournoi:

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

多数人完成工作:)