2012-11-15 24 views
1

不结束我有了这个小东西在这里比赛:Rails的:找到一个字符串开始,而在另一个

def get_articles 
    @articles = [] 
    Doc.column_names.each do |a| 
    if a.match(/^article/) 
     @articles << a 
    end 
    end 
end 

但它返回了很多不需要的结果。我将如何去放弃它返回结果在特定字符串中的结果(例如,_body)?

干杯!

回答

1

如何:

if a.match(/^article/) and !a.match(/_body$/) 

顺便说一句,你的方法可以改写(more compactly)为:

def get_articles 
    @articles = Doc.column_names.select { |a| a.match(/^article/) && !a.match(/_body$/) } 
end 

你也可以更换双比赛用含有zero-width negative look-behind assertion一场比赛,但它对于大多数人来说可读性较差(尽管在快速和肮脏的测试中速度快了约2倍):

def get_articles 
    @articles = Doc.column_names.select { |a| a.match(/^article.*(?<!_body)$/) } 
end 
+0

上帝,这是简单的事情,对吧?干杯! –

相关问题