【问题标题】:Rails: How does session work in this situation?Rails:在这种情况下会话如何工作?
【发布时间】:2016-10-25 21:21:53
【问题描述】:

我正在尝试在控制器中的操作之间传递值。 当我将值放入发送者操作时,它会正确返回对象集合。但是当我从接收器操作中输入值时,它会显示不同的东西。
当我尝试使用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"=>"ccc"}
{"id"=>11, "e_comp"=>"111", "e_num"=>"bbb"}
{"id"=>12, "e_comp"=>"112", "e_num"=>"ddd"}
{"id"=>15, "e_comp"=>"115", "e_num"=>"kkk"}

如果我尝试@receivers.each {|r| r.e_comp},它会显示错误

NoMethodError(哈希的未定义方法“e_comp”:0x007fdc8b96b0a8)

rails 内部会发生什么?为什么会话转换为另一种格式?

【问题讨论】:

  • 您能否发布更多与此问题相关的代码 - 每个 do 块中有什么?
  • @henners66 感谢看到更新的代码

标签: ruby-on-rails ruby session


【解决方案1】:

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

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

对于您的示例,您可以将结果的 id 存储在 session 中,然后在 print 方法中查询数据库来检索它们。

【讨论】:

    【解决方案2】:

    试试:

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

    在您的打印控制器方法中没有s。好像打错了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2021-11-22
      • 2018-06-16
      • 2017-06-21
      • 2018-01-19
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多