如何在 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
有一些属性,例如 title
,created_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
包装器,我可以访问目标上的 date
和 status
访问器方法。我用它来读取表单中的输入。表单代码如下所示
<%= 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 })
我的开发环境
Rails6.0.3.4
sqlite3
ruby 2.6.3
和 RoR n00B
我的模型 Goal
有一些属性,例如 title
,created_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
包装器,我可以访问目标上的 date
和 status
访问器方法。我用它来读取表单中的输入。表单代码如下所示
<%= 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 })