2012-05-28 42 views
1

Rails愛好者熟悉params[:terms]或傳遞給控制器​​的'東西'的哈希值從URL中收集。例如: -使用gsub和block時傳遞原始字符串PLUS匹配?

params 
=> {"term"=>"Warren Buffet", 
    "controller"=>"search", 
    "format"=>"json", 
    "action"=>"index"} 

如果我想在下面的代碼中使用「巴菲特」,「股神」和「自助餐」,沒有人知道我應該使用哪種方法呢? gsub已經接近,但它需要每個匹配而不是原始字符串。除非我做錯了,這是完全可能的:

 
@potential_investors = [] 
params[:term].gsub(/(\w{1,})/) do |term| 
    @potential_investors << User.where(:investor => true) 
    .order('first_name ASC, last_name ASC') 
    .search_potential_investors(term) 
end 

想法?

+1

你不只是想分開空間,幷包括原來的術語? –

回答

2

如何:

s = "Filthy Rich" 
s.split(" ").push(s) 
>> ["Filthy", "Rich", "Filthy Rich"] 

或用scan,如果你喜歡改用正則表達式:

s.scan(/\w+/).push(s) 
>> ["Filthy", "Rich", "Filthy Rich"] 
+0

我明白你在那裏做什麼。不錯。 – pjammer

1
params["term"].gsub(/(\w{1,})/) 

返回一個枚舉器。你可以將其轉換爲一個數組,並追加原詞吧:

ary = params["term"].gsub(/(\w{1,})/).to_a + [params["term"]] 

然後對其進行處理:

ary.each do |term| 
... 
+0

非常有趣我的男人(或女人)seph。很好的使用to_a並且也是這樣思考的。在選出勝利者之前,我會讓這個問題變得更加憋悶。 – pjammer