【发布时间】:2020-07-23 05:18:18
【问题描述】:
我想要一个可以输入和搜索的数组。
add_column :drinkers, :habits, :text, array: true, default: []
drinker.habits << { year: DateTime.now.year, month: DateTime.now.month, drinker_id: drinker_id, napped_at_8am: true }
如何根据多个drinker.habits 键值搜索饮酒者?
Drinker.select {|drinker| drinker[habits][:year] === 2020 && drinker[habits][:drinker_id] === 1 }
这是我的猜测,但我在任何地方都找不到关于多个键值搜索的任何信息。
【问题讨论】:
-
这是一个非常自找的问题。不要在文本列中存储哈希。数组列中的文本要少得多。 JSON 列将是一种改进,但使用单独的表和连接表确实是这里的解决方案。
-
您不想这样做的真正原因是,如果您将一堆序列化数据推入一个字符串类型的列,则数据将无法以任何体面的方式进行查询或索引。您在这里所做的实际上只是将所有内容从数据库中提取出来,然后在 Ruby 中对其进行反序列化和过滤。这根本无法扩展。
标签: arrays ruby-on-rails postgresql hash