我的网址中有以下内容。为了搜索,我需要分别提取4和2。这两个整数one is category id
和其他sub category 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
为什么不接受。
答案 0 :(得分:2)
答案在于你的问题
params[:id].scan(/\d/)
将生成数组。
答案 1 :(得分:1)
params[:id].scan(/\d+/).map(&:to_i)
答案 2 :(得分:1)
如果您将first
或last
作为key
传递:
def string_to_int(param,key)
param[:id].scan(/\d+/).map(&:to_i).send(key)
end
答案 3 :(得分:1)
您可以在: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]