ruby on rails - 用Sunspot索引祖先记录

时间:2012-07-30 09:44:18

标签: ruby-on-rails ruby-on-rails-3 solr

我正在尝试使用太阳黑子(以及搜索,但是如果我可以解决一个,我会解决另一个)来为了分面的目的索引祖先类别的产品。代码适用于直接父母,但我无法弄清楚如何索引祖父母......

在这种情况下,我使用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

1 个答案:

答案 0 :(得分: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

要小心在块的末尾添加日志记录语句,因为它会改变从该块返回的值。