Ruby语句之间的区别

时间:2013-08-13 00:51:22

标签: ruby search nested-attributes sunspot-rails sunspot-solr

我正在使用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

我知道我在这里缺少一些简单的东西。我知道它与缓存没有关系,但无法解决正在发生的事情。

1 个答案:

答案 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!