0

我正在尝试索引产品的祖先类别,以便使用 Sunspot 进行分面(和搜索,但如果我能解决一个问题,我会解决另一个问题)。该代码适用于直系父母,但我无法弄清楚如何索引祖父母......

在这个场景中,我使用 Ancestry gem 创建了一个类别树结构,每个产品都映射到树中的一个或多个叶节点。

我是 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

如果您也需要索引每个类别的祖先,那么您可以使用一个临时变量并返回它。(块中的最后一条语句是“返回”值)。

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 回答