在rails上的ruby中的控制器操作之间共享数据

时间:2011-05-19 19:40:54

标签: ruby-on-rails ruby csv instance-variables

我目前正在开发一个需要解析一些(大文件)csv数据的应用程序。我必须执行几个步骤来操作数据并将其映射到ActiveRecord对象。这必须分几个步骤完成,我必须在视图中显示结果。

所以我从进口#index入手。在这里,我让用户上传csv文件,没有什么花哨的

然后我通过导入#create来创建导入对象。

然后我在step2进口#show。在这里我显示结果。所以在导入#show我解析了所有csv数据并删除了我不需要的行。 (这是一个包含结构的大阵列。)

然后我想转到第3步进一步操作相同的数据。但是在世界上如何在没有会话的情况下从step2中的step2获取大数组(因为Structs我无法在会话中插入它,它会给我以下错误:TypeError (can't dump anonymous class #<Class:0x105477128>):

当我把它放在与.inspect的会话中时,它会引发这个错误:ActionDispatch::Cookies::CookieOverflow。但后来它只是一个大字符串,我想保持ruby功能(例如它是一个包含struct对象的大数组......)

所以将它全部包装起来

第1步 上传文件 第2步 解析数据&amp;操纵它。 第三步: 使用步骤2中的数据(没有会话..) 第4步 来自step3的用户数据

我怎样才能让这个工作起作用......我似乎无法弄明白:&lt;

1 个答案:

答案 0 :(得分:3)

你应该记住不同的原则:

  • 控制器无意处理数据,模型或类别

  • 解析一个大文件不应该在控制器内部进行,而是放在一些队列中(Delayed Job正确处理它,看看它是如何工作的here)。想象一下你的用户无休止地等待发生的事情......

总结一下:

  • 第1步:上传文件=&gt;好吧,我猜你救了它,很棒

  • Step2解析数据&amp;操纵它=&gt;应由步骤1触发并在延迟作业队列中启动

  • 步骤3使用步骤2中的数据(没有会话..)=&gt;所有数据都按我建议的方式处理,可以存储在缓存,数据库或任何有用的地方

  • 步骤4来自步骤3的用户数据=&gt;你想显示你的处理结果,我建议你实现一个AJAX请求,检查作业是否完成(为此,我强烈建议你将信息存储在缓存中,以免经常查询你的数据库)。