Rails
Rails4

Rails4になってcsvが出力しやすくなった

More than 1 year has passed since last update.

Railsでcsvファイル出力とか調べても model でCSV出力用のto_csvメソッド作ってcontorllerで respond_to format.csv して出力するようなのしかみつからんかった。
http://railscasts.com/episodes/362-exporting-csv-and-excel?language=ja&view=asciicast

user.rb
require 'csv'
class User < ActiveRecord::Base
  def self.to_csv
    CSV.generate do |csv|
      csv << column_names
      all.each do |model|
        csv << model.attributes.values_at(*column_names)
      end
    end
  end
end
user_controller.rb
def index
  respond_to do |format|
    format.html
    format.csv { send_data User.to_csv }
  end
end

でも csvとか出力の範疇だしそれわざわざ modelにもたせてごちゃごちゃさせるのやだし urlを扱おうとするとmodel に include Rails.application.routes.url_helpers とか書く必要も出てくるし死にたくなる。

Rails4から viewテンプレートとして .erb .haml .builder みたいな感じで .ruby 拡張子が使えるようになったのを利用して

show.csv.ruby
require 'csv'
CSV.generate do |csv|
  csv << column_names
  all.each do |model|
    csv << model.attributes.values_at(*column_names)
  end
end

みたいにview側にロジックを移してcsv整形してやれば出力をviewに統一できるしmodelに無茶させないので保守もしやすいし世界が平和になる