突出显示字符串中的关键字,允许“at”,“in”,“on”

时间:2016-09-14 05:46:46

标签: ruby-on-rails ruby ruby-on-rails-4

对于每篇文章,都有一个当前突出显示的关键字列表(包含在带有类的范围内)。但是,我需要允许关键字中的某些介词(“at”,“in”,“on”)。每篇文章都属于一个Order,其中包含逗号分隔的字符串。

例如,如果我有一个长尾关键词,如“精品酒店伦敦”,文章中包含“ 伦敦精品酒店”的字样,我需要将其作为关键字突出显示。

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方法在show视图的部分中使用,如下所示:

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

1 个答案:

答案 0 :(得分: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也应该移动一些级别。