我正在尝试使用太阳黑子(以及搜索,但是如果我可以解决一个,我会解决另一个)来为了分面的目的索引祖先类别的产品。代码适用于直接父母,但我无法弄清楚如何索引祖父母......
在这种情况下,我使用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
答案 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
要小心在块的末尾添加日志记录语句,因为它会改变从该块返回的值。