2010-12-06 56 views
3

我在这里问过类似的问题与不成功的答案: Uploadify + Paperclip + Rails nested association before_save最好的办法,以多文件上传在Ruby on Rails的

因此,我会重新制定我的问题:

什么是Rails中上传多,最好的办法文件,并将它们关联到尚未保存的对象? (例如,一个模型(女孩)申请表格,当创建操作完成时(保存按钮被按下),该表格被保存到数据库中。

许多想法浮现在我的脑海中(在他尝试之前通过ajax保存对象上传图像,添加令牌到图像,然后在保存模型对象后添加模型的ID),但我敢肯定很多人都这样做了,并且有一种常见的方法或最好的方法来做到这一点。提前致谢! Martin。

回答

0

一年多以前我遇到过类似的问题,找不到现成的解决方案,所以做了如下:
1.使用SWFUpload将图像上传到存储,调整大小...的“store_image”操作,并返回缩略图的路径和上传图像的ID。
2.使用JS将图像ID放在隐藏字段值中。我用单个字段的值为“2312111:3231231:323212”。
3.当创建一个“主”对象时,通过它们的ID找到上传的图像并建立它们与主体的关系。

此外垃圾回收器删除3天前创建的无关图像。垃圾收集器每天运行cron。

至于我,它是最优雅的解决方案。

__
对不起,我英文不好

+0

但不是不安全的只是保持隐藏在页面上的ID?用户不能写其他ID吗? – Martin 2010-12-08 16:06:50

3

我用这与我的Rails 3个的应用程序之一:

= form_for :import_csv, :url => {:action => :import_csv}, :html => {:multipart => true} do |f| 
    = f.file_field :csv 
    = f.submit 'Upload CSV' 

这将创建可与

CSV.open(params[:import_csv][:csv].tempfile.path) 
检索一个临时文件

我看不出有什么理由不能扩展到多次上传,并且在params[:import_csv][:whatever]

注意**在rails 3.0.3中,临时文件的处理稍有变化,这就是为什么上面的代码使用.tempfile.path,这在以前的版本中并不需要。