我正在使用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
我知道我在这里缺少一些简单的东西。我知道它与缓存没有关系,但无法解决正在发生的事情。
答案 0 :(得分: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!