【问题标题】:Searching a hash in table, using AR使用 AR 在表中搜索哈希
【发布时间】:2015-01-31 08:58:19
【问题描述】:

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

model.rb

  serialize :options, Hash

options属性

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

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

对不起我的英语不好

【问题讨论】:

    标签: ruby-on-rails serialization


    【解决方案1】:

    序列化字段只是数据库中的 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')
    

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

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2013-09-26
      • 1970-01-01
      相关资源
      最近更新 更多