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