ruby-on-rails - 在 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 值。
解决方案
推荐阅读
- reactjs - 博览会在本机应用程序中启动时出错(样式表)
- mips - 如何让我的代码添加两个数字以在 QtSpim 中工作?
- selenium-webdriver - “未能找到 Chrome 二进制文件。” 在系统规范 gitlab-ci
- c# - 使用按钮在 Unity 中启动粒子系统
- typescript - 打字稿:传递类函数时如何检查它们是否绑定
- python - 如何在 Angr 程序的开头添加字符串输入?
- r - 将列名转换为行值并求和
- c# - EF Core Eager 加载返回 null
- javascript - 有没有办法修复 gulp 中的 assert.js:385 错误?
- python - 数组大小不匹配