使用 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(默认)字符串。因此,您不能以常规方式搜索它。您可以做的是:
- Select 需要数据库记录并在其中搜索。
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')
所有这些方式都是有限的,在任何意义上都不是最优的。我建议您不要在要查询的字段上使用序列化。
我尝试将哈希对象添加到我的列中 table.But 我无法进行正确的数据库查询来找到值。
在model.rb
serialize :options, Hash
options
属性
options: {:price=>"20000", :room=>"1", :area=>"40", :floor=>"3", :metro=>"Parnas", :district=>"North-West"},
如何进行正确的数据库查询以找到价值?
抱歉我的英语不好
序列化字段只是数据库中的 YAML(默认)字符串。因此,您不能以常规方式搜索它。您可以做的是:
- Select 需要数据库记录并在其中搜索。
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')
所有这些方式都是有限的,在任何意义上都不是最优的。我建议您不要在要查询的字段上使用序列化。