-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

最初の例では機能しますが、2 番目の例では機能しません。

ただし、これはうまく機能します

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

ここで単純なものが欠けていることを知っています。キャッシングとは関係ないことはわかっていますが、何が起こっているのか頭を悩ませることはできません。

4

1 に答える 1

1

2 番目の例は、ネストされた配列を に入れてい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)

または、2 番目のバージョンに固執する場合は、使用する前に値を平坦化してください。

companies.flatten!
于 2013-08-13T00:57:24.343 に答える