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

dan*_*mcc 1 ruby ruby-on-rails

我在视图中有以下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 %>
Run Code Online (Sandbox Code Playgroud)

但是,如果我想扩展语句的范围以显示特定图像,如果@ 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 %>
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

Illegal octal digit
Run Code Online (Sandbox Code Playgroud)

这指向了09的价值.

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

谢谢,

丹尼

Veg*_*ger 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 %>
Run Code Online (Sandbox Code Playgroud)

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