ruby-on-rails - 如何在 Ruby On Rails 的 ActiveRecord 列中插入哈希
问题描述
我的开发环境
导轨 6.0.3.4
sqlite3
红宝石 2.6.3
和一个RoR n00B
我的模型Goal
有一些属性,如title
等created_on
。基本上是标准类型,如text,date,boolean
等。
我已经进行了验证,我可以从 DB 中读取,从表单等中发布。CRUD 操作很好。到目前为止一切都很好。
现在我想添加一个名为的新列tracking_data
,它将是一种像这样的哈希
{
21-12-2020:true,
22-12-2020:false,
etc
etc
}
这个想法是目标将有一个名为tracking_data
上述的列,它本质上是{ date:bool }
. 它仅记录用户是否在特定日期(键)上完成了目标。真或假(值)。本质上,用户将选择一个日期,选中/取消选中表单中日期的状态。我sqlite3
目前正在使用。正如官方文档https://api.rubyonrails.org/classes/ActiveRecord/Store.html中提到的,我正在尝试实现相同的功能。到目前为止我所做的,并which obviously is not correct
定义了类似的东西
store :tracking_data, accessors: [ :date, :status]
在goal.rb
模型文件上。凭借store
包装器,我可以访问目标方法date
和status
访问器方法。我用它来读取表单中的输入。表单代码如下所示
<%= form.date_field :date %>
<%= form.check_box :status %>
所以我的查询是
如何从表单中读取用户输入的日期以及状态,并将其设置为 tracking_data 哈希中的键/值。
基本上我不应该:date
在函数中传递属性store
,因为它必须由用户输入。
另外我正在使用默认的 Yaml 序列化程序和store
. 任何帮助表示赞赏,如果我能进一步澄清这一点,请告诉我。
谢谢
解决方案
如果将列数据类型定义为jsonb
,则可以使用类似的内容创建或更新记录
Goal.create!(tracking_data: { '21-12-2020': true })
推荐阅读
- css - 为什么背景图片不显示?
- angular - 如何更改 Angular 语言环境数据中的货币头寸?
- java - Java,mysql错误:列数与第1行的值计数不匹配
- php - PHP 包含 HTML 菜单
- javascript - 谷歌分析服务器端授权以获取页面查看计数分析数据并将其显示给首页上的随机访问者
- c - C中的合并排序不起作用
- mysql - 在不允许某些列对的重复值的 mysql 中触发
- python - 使用带有 gevent 的 c 扩展库
- function - 将结构写入文本文件的函数
- android - 如何避免 Firebase 由于 Play 服务版本错误而进入无限循环?