使用条件字符串迭代一个对象数组

时间:2015-10-01 15:59:19

标签: ruby-on-rails ruby

迭代对象数组的最简单方法是,查看对象属性的字符串是否包含单词,然后保持匹配的结果?

我认为这样可行:

@events = @events.map {|n| n if n.game.to_s.include?(game.to_s)}.compact

但我明白了:

NoMethodError: undefined method `map' for nil:NilClass

n.game可以等于nil,也可以是像“Pokemon,MarioKart”这样的字符串。

1 个答案:

答案 0 :(得分:0)

你想要#select,也称为#find_all。这样做你想要的,不需要做一个紧凑的地图,只需使用find_all

matching_events = @events.find_all {|e| n.game.to_s.include?(game.to_s) }

http://ruby-doc.org/core-2.2.3/Enumerable.html#method-i-find_all

但是,如果您收到undefined method map for nil:NilClass,则表示您的@events变量中没有对象。如果您实际上有一个要在@events中过滤的数组,那么您的代码也会起作用。您必须先将其设置为要过滤的数组,然后才能对其进行过滤。