【问题标题】:Accessing Serialized Hash via ActiveRecord通过 ActiveRecord 访问序列化哈希
【发布时间】:2013-09-08 05:23:04
【问题描述】:

我在 MyModel 中有一个序列化哈希,如下所示:

class MyModel < ActiveRecord::Base
    serialize :times, Hash
end

我可以对序列化的哈希进行读写操作,如下所示:

# write
my_model.times[:weekday] = "foo"

# read
bar = my_model.times[:weekend]

但是我在times[:weekday] 附近遇到了语法错误,同时尝试这样的事情:

MyModel.where("foo = ? AND times[:weekday] IS NOT NULL", baz)

我在这里错过了什么?

【问题讨论】:

  • 您的数据库不知道时间列实际上是一个哈希,只有 Ruby on Rails 知道它。您的数据库将此字段视为字符串。您不能在序列化列上设置条件,只有 NULL 测试(这永远不会正确,因为空数组不会被视为 NULL)

标签: ruby-on-rails ruby activerecord serialization hash


【解决方案1】:

怎么样:

MyModel.where("foo = ?", baz).select { |m| m.weekday.present? }

?

【讨论】:

  • 我想你的意思是.select{ |m| m.times[:weekday].present? }
猜你喜欢
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 2023-03-31
  • 2014-05-06
  • 1970-01-01
  • 2013-06-25
相关资源
最近更新 更多