首页 > 解决方案 > 如何在 Ruby On Rails 的 ActiveRecord 列中插入哈希

问题描述

我的开发环境

导轨 6.0.3.4

sqlite3

红宝石 2.6.3

和一个RoR n00B

我的模型Goal有一些属性,如titlecreated_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包装器,我可以访问目标方法datestatus访问器方法。我用它来读取表单中的输入。表单代码如下所示

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

所以我的查询是

如何从表单中读取用户输入的日期以及状态,并将其设置为 tracking_data 哈希中的键/值。

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

另外我正在使用默认的 Yaml 序列化程序和store. 任何帮助表示赞赏,如果我能进一步澄清这一点,请告诉我。

谢谢

标签: ruby-on-railsactiverecord

解决方案


如果将列数据类型定义为jsonb,则可以使用类似的内容创建或更新记录

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

推荐阅读