好的,我整个早上都在想办法解决这个问题。假设您有一个如下所示的哈希:
{"luxury_shopper"=>"10", "movie_goer"=>"80"}
并且您想构建一个如下所示的查询:
Observation.search("something", boost_by: {biz_trv:{factor: 10}} && {day_com:{factor:100}})
到目前为止,我的方法是将传入的哈希转换为如下所示:
[{:luxury_shopper=>{:factor=>"10"}}, {:movie_goer=>{:factor=>"80"}}]
通过像这样遍历原始哈希:
params[:filter].map {|k,v| {k.to_sym => {factor:v}}}
我遇到的问题是,由于我尝试构建的查询由我将“boost_by”的未知数量的哈希组成,所以我不能只是做一些filters[0] && filters[1]
我在这里被难住的事情。有谁知道我如何将哈希动态插入到我的查询中并将运算符放在它们之间?
编辑:
查询如下所示:
Observation.search("someting", boost_by: `insert hash` `insert operator` `insert hash` etc...)
上面的查询可以有任意数量的散列和运算符。因此,如果用户想将 10 个字段传递给 boost_by,我需要能够接受所有 10 个哈希以及它们之间的任何运算符,例如,我的查询可能类似于以下示例:
Observation.search("something", boost_by: {biz_trv:{factor: 10}})
Observation.search("something", boost_by: {biz_trv:{factor: 12}} && {day_com:{factor:50}} && {location:{factor:40}})