CSVダウンロード時に、enumの表記を変更する方法について
Ruby on Railsでユーザーの名前等と、ステータスをダウンロードできるようにしようと考えています。
ステータスはenumで定義しており、現時点ではダウンロードするとenumのキーがそのまま表示されてしまいます。
このステータスをenumのキーに応じて日本語に変換し表示したいと考えてますが、ステータス列はenumで定義しているため別の値(日本語)を代入することができず、悩んでおります。
何か対応策がございましたら、ご教授頂けますと幸いです。
下記、詳細となります。
モデル
class Applicant < ActiveRecord::Base
belongs_to :target
belongs_to :user
has_one :event, through: :target
enum status: {default: nil, confirmed: 1, waiting: 2,canceled: 3}
end
list_download.csv.ruby
require 'csv'
require 'nkf'
csv_str = CSV.generate do |csv|
cols = {
Target.human_attribute_name(:name) => ->(s){ s.target.name },
Applicant.human_attribute_name(:status) => ->(s){ s.status },
User.human_attribute_name(:user_name) => ->(s){ s.user.user_name },
User.human_attribute_name(:name) => ->(s){ s.user.name },
Applicant.human_attribute_name(:comment) => ->(s){ s.comment },
}
# header の追加
csv << cols.keys
# body の追加
@applicants.each do |applicant|
#下記のように、日本語表記に変換したいと考えています。
# case applicant.status
# when "confirmed" then
# applicant.status = "参加確定"
# when "waiting" then
# applicant.status = "キャンセル待ち"
# when "canceled"
# applicant.status = "キャンセル"
# end
csv << cols.map{|k, col| col.call(applicant) }
end
end
# 文字コード変換
NKF::nkf('--sjis -Lw', csv_str)
list_download.csv
応募枠,参加可否,ユーザー名,名前,コメント
参加枠1,confirmed,aaa,佐藤たろう,参加します。
また下記のサイトを参考にさせていただきました。
Rails で CSV ファイルを View を使って生成する
よろしくお願い致します