我的应用程序在Heroku上,我正在通过导入Excel创建资源
我的应用的用户可以从Excel电子表格导入联系人。进行导入的过程有多个步骤,使用户的大脑更容易。在第一步中,他们上传文件(电子表格)。在第二步中,他们选择一些选项来处理文件。这两个步骤不能组合成一个,因为选项取决于文件的标题。
现在,这是以两个动作完成的:一个用于上传文件的POST,另一个用于上传用户选择的POST。该文件作为Tempfile实例化,不会在操作中保持不变。
因此,我不希望用户在中间操作中再次上传第一个文件。这可能吗?
第一步:
= simple_form_for [:choose_headers, @contact_import] do |f|
= f.input :file, as: :file
= f.submit
在第二步中,文件不会保留:
= simple_form_for [@contact_import] do |f|
= f.input :file, as: :file
= f.input :some_other_input
= f.submit
答案 0 :(得分:3)
请勿使用Tempfile
。为上载的数据生成您自己的唯一文件名,并将文件保存在特殊目录中。 (如果您使用Capistrano进行部署,我会在生产中部署时将上传目录放在shared
下。在config/deploy.rb
中,我会添加一个部署挂钩,如果它尚未创建上传目录然后我会使用config/environments/production.rb
和config/environments/development.rb
中的配置值指定上传目录的相对路径,所以一切都在开发和生产中无缝地工作。在我的控制器操作中,我会做类似的事情File.join(Rails.root, UPLOAD_PATH, filename)
为上传的文件构建正确的路径。)
将生成的文件名保存在数据库中,并在用户返回第二步时检索它。此外,添加自定义rake
任务,清除从未使用过的旧上传,并在生产中从cron
作业运行该任务。 (我建议使用whenever
gem来配置cron
个工作。)