2013-10-14 63 views
0

我在我的url中有以下內容。爲了搜索的目的,我需要分別提取4和2。這兩個整數,等爲sub category id如何從rails中的字符串中提取多個整數

params[:id].scan(/\d+$/).first 

使用上述掃描我能得到4但我怎麼能得到一個以上的整數

my-url-for-test-4-2 

我已經創建了一個輔助方法

def string_to_int(param,key) 
    param.scan(/\d+/).map(&:to_i).key 
    end 

而我從我這樣的控制器試過這樣的

id = string_to_int(params[:id],'first') 

但得到錯誤的

undefined method `key' for [4, 2]:Array 

爲什麼它不驗收規範。

+1

您可能是指'.send(key)'(調用具有傳遞參數名稱的方法)而不是調用方法'key()'。 – kristinalim

+0

小心簡單地掃描數字子字符串。如果你有URL段'random1-2string-3-4-5',那麼將會返回'[1,2,3,4,5]「。 – kristinalim

+0

@kristinalim我該如何克服這種複雜性 – overflow

回答

1
params[:id].scan(/\d+/).map(&:to_i) 
+0

你能檢查我編輯過的問題嗎? – overflow

1

回答位於您的問題 params[:id].scan(/\d/)將導致數組。

1

如果你是路過firstlastkey

def string_to_int(param,key) 
    param[:id].scan(/\d+/).map(&:to_i).send(key) 
    end 
1

可以匹配對最後兩個數字部分(用連字符隔開)在你:id參數:

string = params[:id].to_s 
ids = string.scan(/-(\d+)-(\d+)$/)[0] # .try(:map, &:to_i) 

更新:

這裏有一個不太好的cas e可以很好地處理:

a = "random1-2string-3-4-5" 
a.scan(/-(\d+)-(\d+)$/)      # => [["4", "5"]] 
a.scan(/-(\d+)-(\d+)$/)[0]      # => ["4", "5"] 
a.scan(/-(\d+)-(\d+)$/)[0].try(:map, &:to_i) # => [4, 5] 
相關問題