繁体   English   中英

如何创建{x = y | y = z | z = 0}从哈希动态阻止?

[英]How to create { x = y | y = z | z = 0 } block dynamically from hash?

尽管上下文可能无关紧要,但我正在使用Chewy gem通过以下代码过滤Elasticsearch结果:

scope = scope.filter {
      (send('facet_properties').send(property_ids[0], :or) == val.map(&:to_i)) |
          (send('facet_properties').send(property_ids[1], :or) == val.map(&:to_i))
    }

我正在寻找一种方法来遍历property_ids每个元素,而不是调用由a or单个分隔的property_ids[0]property_ids[1]等。 在实际使用中, property_ids不会是固定长度。

不知道您的结构究竟是什么样子还是不确定要达到的目标,但是您是否尝试过类似的方法?

vals = val.map(&:to_i)
prop_hash = Hash[property_ids.map{|prop| [prop,vals]}]
# alternately prop_hash = property_ids.each_with_object({}){|prop,obj| obj[prop] = vals}
scope.filter(facet_properties: {prop_hash}).filter_mode(:or)

由于chewy有一个#filter_mode方法来为条件设置连接类型,因此这似乎对您有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM