2015-10-01 67 views
0

什麼是迭代對象數組的最簡單方法,檢查對象屬性的字符串是否包含一個單詞,然後保持匹配的結果?使用條件字符串迭代對象數組

我想這會工作:

@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或者像 「寵物小精靈,MarioKart」 的字符串。

+2

這意味着'@事件'是零。另外,請查看http://apidock.com/ruby/Array/keep_if –

+1

使用'Array#select'。 –

+0

更好的是,爲什麼不直接使用查詢方法並將工作加載到SQL中,那麼'@事件'不需要加載所有東西以便稍後移除對象。如果您發佈最初設置「@ events」的代碼,這不應該是一件困難的任務。 – engineersmnky

回答

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中過濾,你的代碼也可以工作。您必須將其設置爲您要過濾的數組,然後才能對其進行過濾。