2016-11-24 29 views
1

我正在使用rails4papercliprails_admin宝石,我试图创建一个链接,点击后将从提交表中下载所有附件。下载模型中的所有附件RAILS

这里是我的代码

rails_admin/main/index.html.haml

- if @abstract_model.table_name == "submissions" 
     = link_to "Download all", '/downloadAttachments' 

submission_controller.rb

# Download zip file of all submission 
    def download 
    @submissions = Submission.all 

    file = @submissions[0].file.url(:original, false) #folder to save the archive to 

    Zip::ZipFile.open(file, create=nil) do |zipfile| 
     @submissions.each do |filename| 
     zipfile.add(filename.file_file_name, filename.file.url(:original, false)) 
     end 
    end 
    end 

routes.rb

get '/downloadAttachments' => 'submissions#download' 

WHE ñ我点击链接,但我收到一条消息Cannot find submission with id downloadAll。从我使用rails的经验来看,该方法应该被调用并为我创建可下载的zip文件。问题:这个def有什么问题,我怎样才能得到这个zip文件?

[编辑]

此代码似乎工作,但它得到一个:

File /files/submissions/files/45/original/file.pdf not found 

但我可以证实,文件在我的公共文件夹中肯定存在

+0

从我的猜测,动作是不会提交,但该页面的rails_admin默认操作:指数 –

+0

试试这个比赛“/管理/提交/ downloadAll“=>'管理员/提交#downloadAll',通过:获取,作为:”admin_submission_downloadAll“并添加url”/ admin/submission/downloadAll“ –

+1

您可以粘贴'rake routes | grep提交'在问题中?该错误必须属于routes.rb中定义的路由的顺序 –

回答

0

这是解决方案:

submission_controller.rb

# Download zip file of all submission 
    def download 
    @submissions = Submission.all 

    archiveFolder = Rails.root.join('tmp/archive.zip') #Location to save the zip 

    # Delte .zip folder if it's already there 
    FileUtils.rm_rf(archiveFolder) 

    # Open the zipfile 
    Zip::ZipFile.open(archiveFolder, Zip::ZipFile::CREATE) do |zipfile| 
     @submissions.each do |filename| 
     zipfile.add(filename.file_file_name, 'public/files/submissions/files/' + filename.id.to_s + '/original/' + filename.file_file_name) 
     end 
    end 

    # Send the archive as an attachment 
    send_file(archiveFolder, :type => 'application/zip', :filename => '2016 Submissions.zip', :disposition => 'attachment') 
    end 

routes.rb

get '/downloadAttachments' => 'submissions#download' 

在视图中,则:

= link_to "Download All", '/downloadAttachments' 
-2

我觉得你的link_to代码格式错误。第二个参数应该是路径/路由:

= link_to "Download all", {:controller => "/submissions", :action => "download"}

= link_to "Download all", download_submissions_path

+0

这不是问题。如果我这样做,我会得到一个无路线错误 –

+0

是您的提交控制器/ admin文件夹下?如果是,也许'''= link_to“全部下载”,/ admin /提交/下载'''将工作? –

+0

不,管理员只是来自rails_admin的命名空间,所以我的提交控制器在控制器下 –