2012-07-30 39 views
0

我想索引使用太陽黑子(和搜索,但如果我可以解決一個,我會解決其他)祖先類別的產品的目的。該代碼適用於直接父母,但我不知道如何索引祖父母......軌道上的紅寶石 - 用太陽黑子索引祖先記錄

在這種情況下,我使用Ancestry gem來創建類別樹結構,並且每個產品都是映射到樹中的一個或多個葉節點。

我是新來的rails,所以語法對我來說有點陌生,但如果你看到文本:類別循環,我試圖基本迭代產品的每個祖先,並索引類別名稱每個產品的祖先。

如果您可以幫助我修復很棒的語法或代碼。

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

您傳遞給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 

警惕在塊的末尾添加日誌語句,因爲這將改變從塊返回的值。

+0

好的,謝謝史蒂夫。我最終以另一種效率更低的方式解決了這個問題。 Ruby絕對是一種與我以前不同的語言,當然很有趣。 – 2012-08-01 10:27:58