如何在 Ruby Rails 上的 ActiveRecord 列中插入散列

How to insert a hash in an ActiveRecord column on Ruby On Rails

我的开发环境

Rails6.0.3.4

sqlite3

ruby 2.6.3

RoR n00B

我的模型 Goal 有一些属性,例如 titlecreated_on 等。 本质上是标准类型,如 text,date,boolean

我已经进行了验证,我能够从数据库中读取,post 从表单 etc.CRUD 操作 fine.So 非常好。

现在我想添加一个名为 tracking_data 的新列,它将是这样一种哈希类型

  {
    21-12-2020:true,
    22-12-2020:false,
    etc
    etc
  }

我们的想法是目标将有一个名为 tracking_data 的列,如上所示,它本质上是 { date:bool } 的哈希值。它只是记录用户是否在特定日期(键)上处理了 goal.True 或 false(值)。本质上,用户将 select 日期,check/uncheck 表单中日期的状态。 我目前正在使用 sqlite3。正如官方文档 https://api.rubyonrails.org/classes/ActiveRecord/Store.html 中提到的,我正在尝试实现相同的功能。到目前为止,我所做的 which obviously is not correct 定义了类似

的内容

store :tracking_data, accessors: [ :date, :status]goal.rb 模型文件上。凭借 store 包装器,我可以访问目标上的 datestatus 访问器方法。我用它来读取表单中的输入。表单代码如下所示

  <%= form.date_field :date %>
  <%= form.check_box :status %>

所以我的查询是

我如何从表单中读取用户输入的日期以及状态并将其设置为 tracking_data 散列中的 key/value。

基本上我不应该在 store 函数中传递 :date 属性,因为它必须由用户输入。

额外的 我正在使用带有 store 的默认 Yaml 序列化程序。感谢任何帮助,如果我能进一步澄清这一点,请告诉我。

谢谢

如果您将列数据类型定义为 jsonb,您可以创建或更新类似

的记录
Goal.create!(tracking_data: { '21-12-2020': true })