2016-09-14 68 views
0

對於每篇文章,都有一個當前突出顯示的關鍵字列表(用span範圍包裝)。但是,我需要在關鍵字(「at」,「in」,「on」)中允許某些介詞。每篇文章屬於一個訂單,其中包含關鍵字作爲逗號分隔的字符串。突出顯示字符串中的關鍵字,允許「at」,「in」,「on」

例如,如果我有一個像「精品酒店倫敦」這樣的長尾關鍵詞,並且該文章包含「倫敦精品酒店「我需要突出顯示它作爲關鍵字。

class Article < ActiveRecord::Base 
    def format_content 
    words = self.content 

    # map comma separated keywords into array and remove any whitespace 
    keywords = self.order.keywords.downcase.split(',').map{ |k| k.strip } 

    # replace words with keywords wrapped in span 
    keywords.each do |word| 
     words = words.gsub(/(#{word})/i, "<span class=\"text-primary\">\\1</span>") 
    end 

    words 
    end 
end 

的format_content方法是從放映視圖部分用於創建一個文章後,像這樣:

<%= simple_format article.format_content, { class: "content" }, wrapper_tag: "p" %> 

回答

0

難道是不夠的,只是創建關鍵字與介詞級聯清單?

keywords_with_prepositions = prepositions.flat_map do |preposition| 
    keywords.map do |keyword| 
    [keyword, "#{keyword} #{preposition}", "#{preposition} #{keyword}", "something other in combinatation with your #{keyword}"] 
    end 
end 

我的建議是將其從模型中移出並裝入裝飾器或助手。該方法中的require也應該上移一些。

+0

這將捕捉前/後單詞,但不是在長尾關鍵字之間的單詞。需要爲「倫敦精品酒店*」工作,而關鍵字是「倫敦精品酒店」 –

+0

,因此它只適用於介於兩個關鍵詞之間的介詞? –

+0

對於那些在關鍵字之間的人(在這種情況下,「關鍵字」可以是幾個字),但是對於不需要介詞的直接匹配也是如此。 –

相關問題