模型助手:要检查循环的字符串数组

时间:2014-02-09 19:15:55

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

我试图找出为字符串数组创建模型助手的最佳方法,然后使用该助手检查每个循环是否包含辅助数组中的任何字符串。

我想创建一个模型助手,它只是一个字符串数组:

["Google","IBM","Surge","Apple", "8","100"]等。

在我的模型中,我使用Feedzirra导入并保存记录。

entries.each do |entry|
    if entry.title ... INCLUDES ANY STRING FROM THE HELPER ARRAY

            create!(....
            )

    end
end

我不确定如何:

  1. 创建帮助器或放置它的位置(可能在/ lib?中)
  2. 如何在我的主模型“if entry.title”之后包含此助手
  3. 有人可以指导我吗?

2 个答案:

答案 0 :(得分:0)

这取决于目的。如果这是一个很少更改的小列表,您可以将其放在常量中:

class Entry < ActiveRecord::Base
  KEYWORDS = ["Google","IBM","Surge","Apple", "8","100"].freeze

  def title_matches?
    !self.title.scan(/#{KEYWORDS.join('|')}/).empty?
  end
end

简单说明:字符串匹配区分大小写,因此您可能希望在匹配之前将列表项和标题包含在内。

如果这是一个动态列表,我可能会将关键字存储在一个表中:keywords(id:integer name:string)。然后将匹配方法修改为:

class Entry < ActiveRecord::Base

  def title_matches?(keywords)
    !self.title.scan(/#{keywords.join('|')}/).empty?
  end

  def self.update_from_feed!
    # Get keywords
    keywords = Keyword.pluck(:name)

    # Get entries
    entries = <code to fetch feed>

    entries.each do |entry|
      if entry.title_matches?(keywords)
        create!(....)
      end
    end
  end
end

答案 1 :(得分:0)

问题是你是否需要助手?你可以写一个非常简单的方法

["Google","IBM","Surge","Apple", "8", "100"].any? { |str| entry.include?(str) }