皆様
次のようなことをしたいのですが、できずに詰まっているのでご助言を頂きたくメールしました。
[やりたいこと]
データベースに登録されている 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
ご助言を宜しくお願い致します。