Rails:在这种情况下会话如何工作?

时间:2016-10-25 21:21:54

标签: ruby-on-rails ruby session

我正在尝试在控制器中的操作之间传递值。 当我将值放入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)

铁轨内部会发生什么?为什么会话转向其他格式?

2 个答案:

答案 0 :(得分:2)

您不应在会话中存储复杂或活动记录对象。 ActiveRecord对象可以更改其属性,这可能会引发异常。

此外,在会话中存储未定义的长度数组不是一个好习惯。请注意会话的内存大小仅为4kb。

对于您的示例,您可以在会话中存储结果&ID,然后检索它们在print方法中查询数据库。

答案 1 :(得分:0)

尝试:

@receivers.each {|r| r["e_comp"]}

在打印控制器方法中没有s。这看起来像是一个错字。