2012-11-15 41 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

上帝,這是簡單的事情,對吧?乾杯! –

相關問題