Rails
Rails4

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

More than 3 years have 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に無茶させないので保守もしやすいし世界が平和になる