我尝试将哈希对象添加到表中的列中。但是我无法进行正确的数据库查询来查找价值。
在模型.rb 中
serialize :options, Hash
options
属性
options: {:price=>"20000", :room=>"1", :area=>"40", :floor=>"3", :metro=>"Parnas", :district=>"North-West"},
如何进行正确的数据库查询以找到价值?
对不起,我的英语不好
序列化
字段只是数据库中的 YAML(默认情况下)字符串。因此,您无法以常规方式对其进行搜索。您可以做的是:
- 选择所需的数据库记录并在其中搜索。
def relevant? opts
opts.price == 2000 && opts.room == 1
end
Model.where(...).select { |m| relevant? m.options }
- 将搜索选项转换为 YAML 并以字符串形式按字段搜索。这不会很好地工作,因为它需要定义哈希中的所有字段。
Model.where('options = ?', {price: 123, room: 1, ...}.to_yaml)
- 使用 DB 的模式匹配运算符,例如
LIKE
。
Model.where('options LIKE ? AND options LIKE ?', 'price: 2000', 'room: 4')
所有这些方式都是有限的,在任何意义上都不是最佳的。我建议您不要对要查询的字段使用序列化。