使用 AR 在表中搜索哈希



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

模型.rb

  serialize :options, Hash

options属性

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

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

对不起,我的英语不好

序列化

字段只是数据库中的 YAML(默认情况下)字符串。因此,您无法以常规方式对其进行搜索。您可以做的是:

  1. 选择所需的数据库记录并在其中搜索。
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')

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

最新更新