使用AR在表中搜索哈希

时间:2015-01-31 08:58:20

标签: ruby-on-rails serialization

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

model.rb

中的

  serialize :options, Hash

options属性

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

如何使正确的数据库查询找到值?

抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

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

  1. 选择所需的数据库记录并在其中进行搜索。
  2. def relevant? opts
      opts.price == 2000 && opts.room == 1
    end
    
    Model.where(...).select { |m| relevant? m.options }
    
    1. 将搜索选项转换为YAML,并按字段搜索字符串。这样做不会很好,因为它需要定义哈希的所有字段。
    2. Model.where('options = ?', {price: 123, room: 1, ...}.to_yaml)
      
      1. 使用DB的模式匹配运算符,例如LIKE
      2. Model.where('options LIKE ? AND options LIKE ?', 'price: 2000', 'room: 4')
        

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