如何在Rails中从数组中构造一个id

时间:2015-10-26 08:41:31

标签: arrays ruby-on-rails-4 destructuring

我从redis(我的项目的控制器)获取一个数组,我需要在产品视图中进行解构。

数组(显示2个结果,但它可以更多): ["project-5", "project-4"]

数字(5,4)是我的项目ID(@ project.id),我需要在.each do函数中减去它。

我能找到的所有东西都是针对多个变量的解构解决方案。但在这里我只有1个变量。

任何人都可以帮我解决如何从这个阵列中隔离产品ID的问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用match方法在regex的帮助下获取ID。假设array由您的id-s 344的projetcs组成,那么单行将是:

2.0.0-p353 :091 > array.map{|el| el.match(/\d+$/)[0]}
  => ["3", "44"] 

如果您确定需要使用.each do,那么

array.each do |el|
  el.match(/\d+$/)[0]
end

您还可以使用带有正则表达式的方法gsub来替换除id内部字符串之外的所有内容,并使用空字符串,因此只保留字符串的id-part。 单行(array = ["proj3ct-3", "project-1567"]):

2.0.0-p353 :040 > array.map {|el| el.gsub(/(.*\-)[^\d]*/, "")}
  => ["3", "1567"]

.each do与之前的match示例类似。

编辑:如果您希望do - 块以格式化形式返回已存在的数组,那么您应该使用gsub中的bang-method,如下所示:el.gsub!(/(.*\-)[^\d]*/, "")这也将改变元素。非爆炸方法仅返回更改值而不更改它们。

万一你不知道并且想要测试/分析你的正则表达式,那么this是一个很好的地方 - 我已经使用了很长一段时间了。另外,重新检查一些基础知识的好地方是here