Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在ruby中合并两个哈希_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在ruby中合并两个哈希

Ruby on rails 在ruby中合并两个哈希,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有两个散列集合 and_filters = [{:filter=>:brand, :value=>"Fila"}, {:filter=>:brand, :value=>"Adidas"}] or_filters = [{:filter=>:gender, :value=>"Hombre"}] 我需要制作如下结构 :_or => [ { :_and => [ {:gender => "Hombre"}, {:brand

我有两个散列集合

and_filters = [{:filter=>:brand, :value=>"Fila"}, {:filter=>:brand, :value=>"Adidas"}]
or_filters = [{:filter=>:gender, :value=>"Hombre"}]
我需要制作如下结构

:_or => [
  { :_and => [
    {:gender => "Hombre"}, 
    {:brand => "Adidas"}] 
  }, 
  { :_and => [
    {:gender=>"Hombre"}, 
    {:brand=>"Fila"}] 
  }
]
为此,我做到了

query[:_or] = []
or_filters.each do |or_f|
  query[:_or] << {
    :_and => [
      and_filters.map do |and_f|
        {and_f[:filter] => and_f[:value]}
      end
      { or_f[:filter] => or_f[:value] }
    ]
  }
end
query[:\u或]=[]
或|过滤器。每个过滤器都有|或| f|
查询[:\u或][
和_filters.map do |和_f|
{and_f[:filter]=>and_f[:value]}
结束
{或_f[:filter]=>或_f[:value]}
]
}
结束

但是预期会出现错误:{在代码中显示。显然,第二个循环在语法上很糟糕

这并不漂亮,但我相信这会给出预期的结果:

{_or: or_filters.each_with_object([]) do |or_filter, or_filter_ary|
    or_filter_hsh = {or_filter[:filter] => or_filter[:value]}
    and_filters.each do |and_filter|
      and_filter_hsh = {and_filter[:filter] => and_filter[:value]}
      or_filter_ary << {_and: [or_filter_hsh, and_filter_hsh]}
    end
  end
}

看起来您希望给定的
和\u过滤器的每一个组合都与给定的
或\u过滤器相结合。在这种情况下,假设您不关心顺序(
:gender
,before
:brand
vs.反过来说),您的朋友是:

result = {
  _or: and_filters.product(or_filters).map do |a|
    { _and: a.map {|filter:, value:| { filter => value }} }
  end
}
# => {
#      :_or => [
#        {:_and => [{:brand=>"Fila"}, {:gender=>"Hombre"}]},
#        {:_and => [{:brand=>"Adidas"}, {:gender => "Hombre"}]}
#      ]
#    }

请在repl.it上查看它的实际操作:

这就是我要找的

query = {}
query[:_or] = or_filters.map do |or_f|
  and_filters_aux = and_filters.dup
  and_filters_aux << or_f
  { :_and => and_filters_aux.map{|hsh| {hsh[:filter] => hsh[:value]} } }
end
query={}
查询[:_或]=或_filters.map do |或_f|
和_filters_aux=和_filters.dup
和_filters_aux和_filters_aux.map{| hsh{hsh[:filter]=>hsh[:value]}
结束

什么是
查询之后出现了非常严重的语法错误?此代码不完整。我定义为空哈希
query={}
query = {}
query[:_or] = or_filters.map do |or_f|
  and_filters_aux = and_filters.dup
  and_filters_aux << or_f
  { :_and => and_filters_aux.map{|hsh| {hsh[:filter] => hsh[:value]} } }
end