2016-09-14 3 views
0

各記事には、現在強調表示されている(クラスでスパンでラップされている)キーワードのリストがあります。しかし、私はキーワード( "at"、 "in"、 "on")内の特定の前置詞を許可する必要があります。各記事は、キーワードをカンマ区切り文字列として含むOrderに属します。"at"、 "in"、 "on"を許可する文字列のキーワードを強調表示

たとえば、 "boutique hotels london"のような長いテールキーワードがあり、記事に "in londonのブティックホテル"という単語が含まれている場合は、キーワードとして強調する必要があります。記事が作成された後

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

の間に "boutique hotel * in * London"のために働く必要があるので、それはキーワードの間の前置詞のためだけに働くべきですか? –

+0

キーワード間にあるはい(この場合、キーワードは複数の単語になる可能性があります)、前置詞が不要な場合は直接一致にも使用できます。 –

関連する問題