使用 AR 在 table 中搜索哈希

Searching a hash in table, using AR

我尝试将哈希对象添加到我的列中 table.But 我无法进行正确的数据库查询来找到值。

model.rb

  serialize :options, Hash

options 属性

 options: {:price=>"20000", :room=>"1", :area=>"40", :floor=>"3", :metro=>"Parnas", :district=>"North-West"},

如何进行正确的数据库查询以找到价值?

抱歉我的英语不好

序列化字段只是数据库中的 YAML(默认)字符串。因此,您不能以常规方式搜索它。您可以做的是:

  1. Select 需要数据库记录并在其中搜索。
def relevant? opts
  opts.price == 2000 && opts.room == 1
end

Model.where(...).select { |m| relevant? m.options }
  1. 将您的搜索选项转换为 YAML 并按字段作为字符串进行搜索。这不会很好地工作,因为它需要定义散列中的所有字段。
Model.where('options = ?', {price: 123, room: 1, ...}.to_yaml)
  1. 使用DB的模式匹配操作符,例如LIKE.
Model.where('options LIKE ? AND options LIKE ?', 'price: 2000', 'room: 4')

所有这些方式都是有限的,在任何意义上都不是最优的。我建议您不要在要查询的字段上使用序列化。