Ruby无法将Array转换为Integer

时间:2013-01-16 22:17:50

标签: ruby-on-rails ruby

我收到了这个错误:

TypeError in Properties#show

在/Users/taylor/Pro/rentroll_analysis/app/views/properties/show.html.erb第67行,引发此异常:

can't convert Array into Integer

这是第67行的提取来源:

64:     <td><%=u.unit_number%></td>
65:     <td><%=u.unit_type%></td>
66:     <td><%=number_to_currency(u.market_rent - u.current_rent)%></td>
67:     <td><%=number_to_currency(u.market_rent - u.current_rent)*(session[:assumptions]=    [:spread_x])%></td>
68:    
69:   </tr>
70: <%end%>

运行时:

def setup_assumptions
  if session[:assumptions].nil?
    session[:assumptions]=[:min_spread=>400,:spread_x=>10]
  end
end

我确信它相对简单,但我无法理解。

2 个答案:

答案 0 :(得分:1)

如果您尝试将其设置为地图,请使用地图(花括号)而不是数组(方括号):

session[:assumptions] = { :min_spread => 400, :spread_x => 10 }

否则,您将session[:assumptions]设置为中带有哈希的数组。

另外,你的目标是什么?

number_to_currency(u.market_rent - u.current_rent) * (session[:assumptions]= [:spread_x])

我认为你的意思是:

number_to_currency(u.market_rent - u.current_rent) * session[:assumptions][:spread_x]

答案 1 :(得分:0)

当您将某些内容保存到会话中时,它会将其保存为字符串,因此当您从会话中提取某些内容并希望对其执行Integer方法时,您可能必须指定它是一个整数。

执行以下操作:session[:assumptions][:spread_x].to_i将会话内容用作整数。此外,请注意我认为您的原始代码中存在错误的=

最后,您可能不会遇到此问题,但我有时在会话变量中使用嵌套符号时遇到问题。与session[:assumptions][:spread_x]中一样。我有时不得不将其更改为类似session[:assumptions]['spread_x']的内容,而是使用字符串调用嵌套变量。

祝你好运!