首页 > 解决方案 > 在 Rails 5 中反序列化没有 gems 或 PostgreSQL 的 JSON

问题描述

我在数据库中保存了一个小的 JSON 片段,如下所示,但我无法以可用的方式检索数据。

在这个应用程序中,Rails 通过 fetch AJAX 调用获取 JSON,并成功地将以下内容保存在 decor 字段中:

{"drapes": "red", "table": "wood", "candles":"true"}

在 Rails 控制台中,这符合预期:

> p = Party.last
  => ...
> p.decor
  => "{:drapes=>\"red\", :table=>\"wood\", :candles=>\"true\"}"

目前, decor是 SQLite 中的(数据类型)文本字段。我以前使用过 PostgreSQL 来处理 JSON,但现在不想在这个项目上去那里,并且给出了官方文档参考(如下),应该能够在没有任何额外 gem 的情况下进行管理。

这是https://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html推荐的模型(party.rb) :

class Party < ApplicationRecord
  serialize :decor, JSON
end

这是控制器(party_controller.rb)中的相关操作:

def create
  @party = Party.new(party_params)
  @party.save
end

所以一切都很好,直到我真正想要提取装饰并(例如)在视图模板中显示它。使用以下内容(在party/index.html.erb中)...

<p>
  <%= p.decor.drapes %>
</p>

...我得到:

派对中的 NoMethodError#index

未定义的方法“窗帘”

p.decor显然是作为错误的数据类型从模型中出来的,但是尽管在控制台中进行了各种实验,但我看不到如何使用它们的键提取 JSON 值。

标签: ruby-on-railsjsonserialization

解决方案


推荐阅读