Ruby undefined方法`[]'数组值的子串

时间:2015-09-11 06:47:55

标签: ruby mongodb

我正在编写一个脚本来获取值,解析它们并将它们保存到mongodb。这是我的代码:

def extractFunctionFromFieldName(s: String): User => Any = { u: User => 
  val f = classOf[User].getDeclaredField(s)
  f.setAccessible(true)
  f.get(u)
}

当我从mongodb结果中到达拆分字符串的第7和第9个数组值时,出现错误。这是错误:

collection.find({}, :projection => {"_id" => 0, "SMSMSG" => 1, "SMSFR" => 1}).each{
  |row|
  dataw = row["SMSMSG"]
  pars = dataw.split(';')
  trans = pars[1]
  loc = pars[3]
  pltn = pars[5]
  timin = pars[6]
  timout = pars[7] #the error occurs here
  transam = pars[8]
  totalh = pars[9] #to here
  puts timout[0,2] #this is error but when
  puts timin[0,2] #there is no error and it displays the result perfectly
}

2 个答案:

答案 0 :(得分:2)

如果你读错误undefined method '[]' for nil:NilClass很容易理解:你试图在一些零的对象上使用括号运算符。您可能认为该对象是一个字符串,但它实际上是零。您应该找出错误引用的对象,然后添加代码来处理该对象为nil的情况(或修复导致它为nil的根问题)。一种选择是检测它是否为零然后将其转换为空字符串。这是你可以写的一种方式:

(some_object || '')[0, 2]

答案 1 :(得分:1)

除了David Grayson提供的解决方案之外,还可以在您希望成为字符串的对象上使用to_s方法。如果它已经是一个字符串,它将只返回self。 nil将返回一个空字符串。

"a string".to_s #=> "a string"
nil.to_s        #=> ""