rails:3970
From: Nobukazu TAKAI <nocturne_2_eflat_9_2@m...>
Date: Sat, 08 Feb 2014 22:11:29 +0900
Subject: [rails:3970] ファイルの圧縮
皆様
次のようなことをしたいのですが、できずに詰まっているのでご助言を頂きたくメールしました。
[やりたいこと]
データベースに登録されている PDF データを ZIP or TAR で1つのファイルをまとめてからダウロードするアクションを作る
チェックされた本のPDF をダウンロードしたいです。
book model ( title, abstract, author )
has_one :pdf
pdf model ( data, content_type, filename, book_id )
belongs_to :paper
app/views/books/index.html.erb
...
<%= form_tag(:action=> 'download_pdf') do -%>
<% @books.each do |book| -%>
<td><%= book.title -%></td>
<td><%= book.abstract -%></td>
<td><%= book.author -%></td>
<td><%= check_box_tag "checked_items[#{book.id}]", book.id %></td>
<% end -%>
<%= submit_tag "チェックした項目の PDF をダウンロード" %>
<% end -%>
とりあえず、圧縮をせずにファイルを次々にダウンロードしようかと以下のような controller を作成したのですが、
Render and/or redirect were called multiple times in this action.
というエラーが出て、うまくいきませんでした。
1つだけチェックボックスをチェックしたときにはファイルをダウンロードできたのですが。
そこで、send_data を実行する前に対象のファイルを1つにまとめてしまえば、全て解決!かと思い、ネットで検索するのですが、思うようなサイトに当たりません。
rubyzip などあることは見つけたのですが、情報が少なくて思うように使えませんでした。
app/controllers/books_controller.rb
def download_pdf
if params[:checked_items].present?
items = params[:checked_items].keys
items.each do |item|
@book= Book.find(item)
if @book.pdf.present?
send_data @book.pdf.data, type: @book.pdf.content_type, disposition: "attachment", filename: @paper.pdf.filename
end
end
else
redirect_to :admin_papers, notice: 'チェックされていなかったよ'
end
end
ご助言を宜しくお願い致します。
-> 3970 2014-02-08 14:11 [nocturne_2_eflat_9_2] ファイルの圧縮 @ 3971 2014-02-08 15:20 ┗[netwillnet@g... ] 3972 2014-02-08 23:26 ┗[nocturne_2_eflat_9_2] @ 3973 2014-02-09 08:07 ┗[terasawan@g... ] @ 3974 2014-02-09 08:09 ┣[terasawan@g... ] 3975 2014-02-09 09:22 ┃┗[nocturne_2_eflat_9_2] 3976 2014-02-09 11:08 ┗[zn@m... ] @ 3977 2014-02-09 15:02 ┣[terasawan@g... ] 3978 2014-02-09 15:02 ┗[nocturne_2_eflat_9_2]