Rails if语句导致非法八进制数字错误?

时间:2010-09-05 09:09:15

标签: ruby-on-rails ruby

我在视图中有以下if语句:

<% if @kase.jobno[1,2].to_i == 10 then %>
  <img src="../images/2010.jpg" alt="2010">
<% elsif @kase.jobno[1,2].to_i == 11 then %>
  <img src="../images/2011.jpg" alt="2011">
<% else %>
  <img src="../images/document.jpg" alt="Document" />
<% end %>

但是,如果我想扩展语句的范围以显示特定图像,如果@ kase.jobno字段包含数字08并将语句更改为以下内容,那么它的工作绝对完美:

<% if @kase.jobno[1,2].to_i == 09 then %>
  <img src="../images/20109.jpg" alt="2009">
<% elsif @kase.jobno[1,2].to_i == 10 then %>
  <img src="../images/2010.jpg" alt="2010">
<% elsif @kase.jobno[1,2].to_i == 11 then %>
  <img src="../images/2011.jpg" alt="2011">
<% else %>
  <img src="../images/document.jpg" alt="Document" />
<% end %>

然后我收到以下错误:

Illegal octal digit

指向09值。

是否不可能有一个if语句与0X(从零开始,后跟其他数字)数字进行比较?

谢谢,

丹尼

2 个答案:

答案 0 :(得分:6)

从0开始一个数字告诉Ruby它是一个八进制数。 09是非法的八进制数,因为这些数字从0到7(而不是9)计数。所以07之后是010,十进制中是8,接着是011,即十进制9。

如果您想查看2009年是否可以使用此支票:

<% if @kase.jobno[1,2].to_i == 9 then %>
  <img src="../images/2009.jpg" alt="2009">
<% end %>

(所以只需删除09前面的0)

答案 1 :(得分:1)

或者,只需与字符串进行比较

<% if @kase.jobno[1,2] == "09" then %>
  <img src="../images/20109.jpg" alt="2009">