検索結果をCSV出力する
検索した結果をViewをつかってCSV出力する方法です。
環境
- Rails 4.2
実装
Controller
index.csvで呼ばれた場合に、CSVを出力するようにします。
def index @alls = Item.all @items = @alls.page(params[:page]) respond_to do |format| format.html format.csv do send_data render_to_string, filename: "item-#{Time.now.strftime("%Y%m%d")}.csv", type: :csv end end end
View
require "csv" require "nkf" csv_data = CSV.generate(force_quotes: true) do |csv| csv << %w(ID コード 名前) @alls.each do |item| row = [] row << item.id row << item.try(:code) row << item.try(:name) csv << row end end NKF::nkf('--sjis -Lw', csv_data)
- 呼び出し元 (index.html.erb)
検索もCSV出力もsubmitで実行するために、こんな呼び出し方にしています。
<%= form_tag '', name: 'search_form', method: :GET do %> # 検索 <button type="submit"> <i class="fa fa-search"></i> </button> # CSV出力 <button type="submit" name="format" value="csv"> <i class="fa fa-download"></i> </button> <% end %>