Search code examples
rubysearchnested-attributessunspot-railssunspot-solr

Ruby difference between statements


I'm using Solr to search for a list of companies. when I try to filter

Works

  companies = []
  current_user.cached_company.cached_companies.each do |company|
    companies << company.id
  end

Doesn't Work

  companies = []
  companies << current_user.cached_company.cached_companies.map(&:id)

When I call

  @search = Company.search do 
    with :id, companies
  end
  @companies = @search

It works with the first example but not the second.

However, this works just fine

  @search = Company.search do 
    with :id, current_user.cached_company.cached_companies.map(&:id)
  end
  @companies = @search

I know that I'm missing something simple here. I know it doesn't have to do with the caching, but cannot wrap my head around what's going on.


Solution

  • Your second example is putting a nested array in companies. Here's a simplified idea of what's going on:

    data = [{value: 1}, {value: 2}, {value: 3}]
    
    foo = []
    data.each do |number|
      foo << number[:value]
    end
    p foo
    # => [1,2,3] # One array with 3 values
    
    foo = []
    foo << data.map { |item| item[:value] }
    p foo
    # => [[1,2,3]] # One array with one value (another array with 3 values)
    

    Either stick with your first version, or just do this:

    companies = current_user.cached_company.cached_companies.map(&:id)
    

    Or, if you want to stick with your 2nd version, make sure to flatten the values before you use them:

    companies.flatten!