Rails:我的代码导致“无法将nil转换为String”

时间:2011-11-01 22:30:50

标签: ruby-on-rails

我的开发人员在下面的代码...它是否期望像“1 - 1月”之类的东西,并尝试将其解析为其他内容?

我更改了表单上的代码,所以现在传递给此控制器的值只是“1”而不是“1 - 1月”

如何解决此问题,以便我无法将“无法将nil转换为字符串”错误?

  def get_expiry_month_number(monty_det, expiry_year)
    if MONTH_NAMES.include? monty_det
       month_number = MONTH_NAMES.index(monty_det)
       month_number = MONTH_NUMBERS[month_number]
       expiry_year = month_number.to_s + expiry_year[expiry_year.length-3..expiry_year.length-1]
       return expiry_year
    end
  end

2 个答案:

答案 0 :(得分:0)

在您的示例中,您遇到的问题是,您年度计算中的一个字符串为零。很可能就是这个,

expiry_year[expiry_year.length-3..expiry_year.length-1]

您可以通过在culprit变量上调用to_s来尝试解决此问题,从而将nil转换为''然后连接。

像这样:expiry_year = month_number.to_s + expiry_year[expiry_year.length-3..expiry_year.length-1].to_s

但是,这可能会产生其他后果,因此不建议这样做。更好的方法是找出为什么你期望的字符串变成空的,并且可能显示适当的错误。

你能解释一下这个函数应该做些什么吗?可能是错误发生时expiry_yearmonty_det的值? puts语句在这里可以提供很大的帮助。

答案 1 :(得分:0)

我想get_expiry_month_number('january', 2011)会返回:1011

事实上:

  • month_number应该返回1月1日

  • expiry_year[expiry_year.length-3..expiry_year.length-1]返回2011 =>的最后3个字符011