2013-10-14 40 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] 
相关问题