如何从rails中的字符串中提取多个整数

时间:2013-10-14 12:01:02

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

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

答案 0 :(得分:2)

答案在于你的问题 params[:id].scan(/\d/)将生成数组。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果您将firstlast作为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]