0

我的网址中有以下内容。为了搜索,我需要分别提取 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

为什么不接受。

4

4 回答 4

2

答案在于你的问题 params[:id].scan(/\d/)会导致数组。

于 2013-10-14T12:08:11.427 回答
1
params[:id].scan(/\d+/).map(&:to_i)
于 2013-10-14T12:05:02.563 回答
1

如果您正在通过firstlast作为key

   def string_to_int(param,key)
     param[:id].scan(/\d+/).map(&:to_i).send(key)
   end
于 2013-10-14T12:10:28.337 回答
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]
于 2013-10-14T12:17:39.973 回答