0

Sunspotを使用してファセットを作成する目的で、製品の祖先カテゴリにインデックスを付けようとしています(検索しますが、一方を解決できれば、もう一方も解決します)。コードは直接の親には問題なく機能しますが、祖父母にインデックスを付ける方法がわかりません。

このシナリオでは、Ancestry gemを使用してカテゴリツリー構造を作成し、各製品はツリー内の1つ以上のリーフノードにマップされています。

Railsは初めてなので、構文は少し異質ですが、text:categoriesループが表示された場合は、基本的に、製品の各祖先を繰り返し、各製品の祖先のカテゴリ名にインデックスを付けようとしています。

構文やコードを修正するのを手伝っていただければ幸いです。

searchable do
    text :aux_description, :long_description, :name, :on_special, :part_number, :short_description
    text :categories do 

    categories.map { |category| category.name 
        Rails.logger.debug { "indexing category " + category.name }
        category.ancestors.each { |ancestor| ancestor.name
         Rails.logger.debug { "indexing category " + ancestor.name }}
      }
end
4

1 に答える 1

0

渡すブロックはtext、文字列の配列を返す必要があります。したがって、カテゴリ名にインデックスを付ける必要がある場合、これは機能します。

text :categories do
  categories.map { |category| category.name }
end

各カテゴリの祖先にもインデックスを付ける必要がある場合は、一時変数を使用してそれを返すことができます。(ブロックの最後のステートメントは'return'値です)。

text :categories do
  names = []
  categories.each { |category| names << category.name }
  categories.each { |category| category.ancestors.each { |ancestor| names << ancestor.name } if category.ancestors }
  names
end

または、ローカル変数を削除することもできます。

text :categories do
  categories.map { |category| [category.name] + (category.ancestors ? category.ancestors.map { |ancestor| ancestor.name } : []) }.flatten
end

ブロックから返される値が変更されるため、ブロックの最後にロギングステートメントを追加する場合は注意が必要です。

于 2012-07-30T13:04:45.190 に答える