Ruby 获得;TypeError:没有将Regexp隐式转换为整数;尝试从字符串中提取数字时
我使用的是Rails 5。我在提取字段的数字部分并将其插入模型属性时遇到问题。我有Ruby 获得;TypeError:没有将Regexp隐式转换为整数;尝试从字符串中提取数字时,ruby,regex,model,ruby-on-rails-5,Ruby,Regex,Model,Ruby On Rails 5,我使用的是Rails 5。我在提取字段的数字部分并将其插入模型属性时遇到问题。我有 puts "age:#{age}" self.age = age[/\d+/].present? ? age[/\d+/].to_i : nil 但我得到了输出 age:41 TypeError: no implicit conversion of Regexp into Integer from /Users/davea/Documents/workspace/myproject/app/mo
puts "age:#{age}"
self.age = age[/\d+/].present? ? age[/\d+/].to_i : nil
但我得到了输出
age:41
TypeError: no implicit conversion of Regexp into Integer
from /Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in `[]'
from /Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in `set_age'
from /Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:51:in `block in <class:RaceTime>'
年龄:41岁
TypeError:没有将Regexp隐式转换为整数
from/Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in`[]'
from/Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:129:in'set_age'
from/Users/davea/Documents/workspace/myproject/app/models/my_object_time.rb:51:in'block in'
有没有更好的方法来编写上面的内容来提取数字(如果有),同时避免我看到的错误?您的
age
变量可能是一个数字。当我尝试使用带有数字的[/regex/]
方法时,我会遇到相同的错误:
[5] pry(main)> 1[//]
TypeError: no implicit conversion of Regexp into Integer
你可以说年龄=年龄。首先,我认为你最好这样写:
str = "sometext 123 sometext"
self.age = /(?<age>\d+)/ =~ str.to_s ? age.to_i : nil
str=“sometext 123 sometext”
self.age=/(?\d+)/=~str.to\s?年龄:零
错误消息告诉您,您正在调用的[]
需要一个参数,因此它尝试将转换为一个整数(通过调用),但失败,因为Regexp
没有对to int
做出响应
由于确实将Regexp
作为参数,因此age
引用的对象显然不能是a,它必须是其他对象。不幸的是,你没有告诉我们它是什么对象(你真的应该在你的问题中包含这样的信息!),但我们可以做出一个有根据的猜测:在Ruby中,我能想到的只有三个[]
方法,这可能会引起这个确切的错误:,和。因此,我在这一点上的最佳猜测是,您的age
对象实际上不是字符串,而是一个对象、一个或一个
但是,我们可以做得更好:你在你的问题中包括了调查的结果。返回类似于'[1,2,3]'
的内容,但您的问题显示age.to\s
返回类似于'41'
的内容。所以,它不能是数组
因此,age
要么是一个MatchData
对象,要么是一个整数
,但您希望它是一个字符串
。你需要弄清楚年龄是从哪里来的,为什么它不是你所期望的,然后解决这个问题。我不明白。你什么意思?哦,你是个新手,对吧?在控制台中输入“str=”123“,然后输入“str[/\d+/]”。看你那奇怪的语言!如果age
确实是一个数字,那么首先将其转换为字符串,然后提取数字,然后将其解析为一个数字是没有意义的,而这个数字正是您开始使用的数字。