Rails会话数据 - 存储在哈希表中

8
我有一个表单在 Rails 视图上,可以提交数据到一个代表购物车摘要页面的页面。
当我将数据提交到下一个页面时,根据控制台输出,它们将被传输如下。
"team"=>{"team_name"=>"Joe Blogs", "email"=>"joe@bloggs.com", "player1"=>"
3", "player2"=>"4", "player3"=>"5"}

我想将这些数据存储为会话变量,即哈希,以便如果另一个团队提交到摘要页面,我可以将其作为另一个哈希条目添加到会话中。例如:team [1],team [2]。 然后我可以相应地访问team [1] .team_name等并使用它们。
总之,我希望用户能够填写表单并将其放入购物车中。他们可以返回并再次执行相同的操作。最后,他们可以查看购物车并删除任何不需要的记录,清空购物车或将所选内容提交到数据库中。
我找不到如何实现它或是否可能实现它。
有什么解决方案或建议吗?
1个回答

8
您可以轻松地在Rails会话中存储一个哈希表。
例如:
class SomeController < ApplicationController
  def some_action
    session[:cart] = {"team_name"=>"Joe Blogs", "email"=>"joe@bloggs.com", "player1"=>"3", "player2"=>"4", "player3"=>"5"}
  end
end

然而,默认情况下,Rails将会把session存储在cookies中,而cookie的数据大小限制只有4千字节,因此如果你的哈希表中包含多于几个键,你需要使用其他方式进行session存储,例如数据库。

要将session存储到数据库中,你可以使用activerecord-session_store gem。


1
是的,session[:cart]可以容纳数组和哈希,因此它将返回您放置在那里的任何内容。例如:session[:cart]['team_name'] - Dmitry Sokurenko
那么,session[:cart][1]也可以保存一个哈希表,如果我设置了session[:cart][1] = {"team_name"=>"Joe Blogs", "email"=>"joe@bloggs.com", "player1"=>"3", "player2"=>"4", "player3"=>"5"},我可以通过session[:cart][1]['team_name']来访问它吗?这样就可以在会话中存储几个“团队”了? - Alan
使用 session[:cart].length 来获取购物车中有多少个项目,使用 session[:cart].delete_at(some_index) 来删除某些内容,我相信,在删除后您需要重新分配会话,即 session[:cart] = session[:cart] - Dmitry Sokurenko
第一条语句仍然没有输出。 puts session[:teams]["#{i}"] puts session[:teams]['0'] 而第二条语句则如预期一样得到了输出。 - Alan
{"0"=>{"team_name"=>"Alan", "email"=>"joe@bloggs.com", "player1"=>"406", "player2"=>"389", "player3"=>"416"}} - Alan
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接