我正在尝试在控制器中的操作之间传递值。
当我将值放入sender动作时,它会正确返回一组对象。但是当我从接收器动作中提出值时,它显示出不同的东西
当我尝试使用each
从集合
example_controller.rb
def query
@results = Result.all
session[:results] = @results
puts session[:results]
end
def print
@receiver = session[:results]
puts @receiver
end
结果:0x007fdc8b96b0a8
结果:0x007fdc8b96af68
结果:0x007fdc8b96adb0
结果:0x007fdc8b96ac70
{" id" => 9," e_comp" =>" 109"," e_num" =>&# 34; ccc"}
{{#34; id" => 11, " e_comp" =>" 111"," e_num" =>" bbb"}
{" id& #34; => 12," e_comp" =>" 112", " e_num" =>" ddd"}左{" id" => 15," e_comp" =>& #34; 115"," e_num" =>" kkk"}
如果我尝试@receivers.each {|r| r.e_comp}
,则会显示错误
NoMethodError(未定义的方法`e_comp' for Hash:0x007fdc8b96b0a8)
铁轨内部会发生什么?为什么会话转向其他格式?
答案 0 :(得分:2)
您不应在会话中存储复杂或活动记录对象。 ActiveRecord对象可以更改其属性,这可能会引发异常。
此外,在会话中存储未定义的长度数组不是一个好习惯。请注意会话的内存大小仅为4kb。
对于您的示例,您可以在会话中存储结果&ID,然后检索它们在print方法中查询数据库。
答案 1 :(得分:0)
尝试:
@receivers.each {|r| r["e_comp"]}
在打印控制器方法中没有s
。这看起来像是一个错字。