-1

我正在使用 Solr 搜索公司列表。当我尝试过滤时

作品

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

不工作

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

当我打电话

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

它适用于第一个示例,但不适用于第二个示例。

但是,这工作得很好

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

我知道我在这里遗漏了一些简单的东西。我知道这与缓存无关,但我无法理解正在发生的事情。

4

1 回答 1

1

您的第二个示例是将嵌套数组放入companies. 这是正在发生的事情的简化想法:

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)

要么坚持你的第一个版本,要么就这样做:

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

或者,如果您想坚持使用第二个版本,请确保在使用它们之前将值展平:

companies.flatten!
于 2013-08-13T00:57:24.343 回答