Ruby on rails 如何从rails中的字符串中提取多个整数
我的url中有以下内容。为了搜索,我需要分别提取4和2。这两个整数,Ruby on rails 如何从rails中的字符串中提取多个整数,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,我的url中有以下内容。为了搜索,我需要分别提取4和2。这两个整数,一个是类别id,另一个是子类别id 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 = str
一个是类别id
,另一个是子类别id
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
为什么不是接受。答案在于你的问题
params[:id].scan(/\d+/).map(&:to_i)
params[:id]。扫描(/\d/)
将生成数组。答案取决于您的问题
params[:id]。扫描(/\d/)
将生成数组。如果您将第一个
或最后一个
作为键
:
def string_to_int(param,key)
param[:id].scan(/\d+/).map(&:to_i).send(key)
end
如果您将
第一个
或最后一个
作为键传递:
def string_to_int(param,key)
param[:id].scan(/\d+/).map(&:to_i).send(key)
end
您可以匹配:id
参数中的最后两个数字部分(用连字符分隔):
string = params[:id].to_s
ids = string.scan(/-(\d+)-(\d+)$/)[0] # .try(:map, &:to_i)
更新:
这是一个不太边缘的案例,可以很好地处理:
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]
您可以匹配:id
参数中的最后两个数字部分(用连字符分隔):
string = params[:id].to_s
ids = string.scan(/-(\d+)-(\d+)$/)[0] # .try(:map, &:to_i)
更新:
这是一个不太边缘的案例,可以很好地处理:
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]
您的意思可能是.send(key)
(使用传递的参数名调用方法),而不是调用方法key()
。请注意只扫描数字子字符串。这将返回[1,2,3,4,5]
如果您有URL段random1-2string-3-4-5
@kristinalim如何克服这种复杂性,请查看我的答案。它包括在行尾进行匹配($
),包括正则表达式中的连字符(另一个分隔符不应该起作用),以及扫描最后两个小数。您可能是指.send(key)
(使用传递的参数名调用方法),而不是调用方法key()
。在扫描数字子字符串时要小心。这将返回[1,2,3,4,5]
如果您有URL段random1-2string-3-4-5
@kristinalim如何克服这种复杂性,请查看我的答案。它包括在行尾进行匹配($
),包括正则表达式中的连字符(另一个分隔符不起作用),以及扫描最后两个小数。