インストール
% sudo gem1.8 install zipruby
Railsのプロジェクトトップ下にあるGemfileに以下を追加。
gem 'zipruby'
bundleで反映。
% bundle install --local --without production (開発環境) % bundle install --local --without development(公開環境)
app/views/posters/show.html.erb の出力結果をダウンロードさせるとする。このとき、スタイルシートも一緒にダウンロードしないと見栄えがわるい。スタイルシートが public/stylesheets/main.css であるとき、app/views/layouts/download.html.erb を用意し、ヘッダのスタイルシート部分を以下のようにする。
<link href="main.css" media="screen" rel="stylesheet" type="text/css" />
tmp/downloads以下にダウンロードさせるファイルを生成するとする。app/controller/posters_controller.rb に アクション download_zipを加える。
def download_zip
 〜 処理省略 〜
  prefix = "show-#{params[:id]}"
    action = 'show'
    zipfilename = generate_statichtml_in_zip(action, prefix)
    send_file(zipfilename,
                {:type => 'application/zip',
                :filename => "#{prefix}.zip"})
end 
private
def generate_statichtml_in_zip(action, prefix)
    path = "#{Rails.root}/tmp/downloads/"
    zipfilename = path+prefix+".zip"
    htmlname = prefix+'/'+prefix+".html"
    stylesheet_file = "#{Rails.root}/public/stylesheets/main.css"
    zip_stylesheet_file = prefix+'/main.css'
    if File.exist?(zipfilename)
      File.unlink(zipfilename)
    end
    Zip::Archive.open(zipfilename, Zip::CREATE) do |ar|
      ar.add_dir(prefix)
      ar.add_buffer(htmlname, render_to_string(:action => "#{action}",:layout => "storeable"))
      ar.add_file(zip_stylesheet_file, stylesheet_file)
    end
    return zipfilename
  enddownload_zipのアクションを呼び出すとzipファイルがダウンロードされる。