我有一系列哈希值存储在会话变量最近访问过的项目上。我能够在没有问题的情况下迭代每个数组项,但是我很难从哈希中获取特定项。
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>
但我想要&#34;链接格式&#34;如上所述: - &gt; 0.0.0.0/acccounts/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 %>