TypeError:没有将Symbol隐式转换为整数哈希数组

时间:2014-12-12 00:03:03

标签: ruby-on-rails-4 typeerror

我有一系列哈希值存储在会话变量最近访问过的项目上。我能够在没有问题的情况下迭代每个数组项,但是我很难从哈希中获取特定项。

class AccountsController < ApplicationController
...
    #Create new array if it does not exist
    session[:recent_items] ||= Array.new 

    #insert an element on the first position
    session[:recent_items].insert(0,{:type => "accounts", :id => @account.id, :name => @account.name }) 

    #Remove duplicates
    session[:recent_items] = session[:recent_items] & session[:recent_items] 

    #Grab only the first 5 elements from the array
    session[:recent_items] = session[:recent_items].first(5)

...
end

应用程序视图

<% session[:recent_items].each do |item| %>
    <a href="/<%= item[:type] %>/<%= item[:id] %>"><%= item[:name] %></a>
<% end %>

在最后一个循环中,我试图为每个最后访问的记录生成一个链接。例如:   - &GT; 0.0.0.0/acccounts/1

我收到了这个错误:

TypeError in Accounts#show

no implicit conversion of Symbol into Integer

更新(2014年12月13日)

如果我只打印哈希数组,它的外观如下:

<li><%= session[:recent_items] %></li> 

recent_items

但我想要&#34;链接格式&#34;如上所述: - &gt; 0.0.0.0/acccounts/1

1 个答案:

答案 0 :(得分:1)

好像你的哈希中有一个类型不匹配。数组的第一个元素将键作为符号,而其余元素则将键作为字符串。这可能是因为会话数据被序列化并且符号被作为字符串加载回来。

session[:recent_items] ||= []
session[:recent_items].unshift("type" => "accounts", "id" => @account.id, "name" => @account.name)
session[:recent_items] = session[:recent_items].uniq.first(5)

然后在模板中使用字符串键。

<% session[:recent_items].each do |item| %>
  <a href="/<%= item['type'] %>/<%= item['id'] %>"><%= item['name'] %></a>
<% end %>