どうしても、CSVをShift_JISにしてくれ!!
という熱い要望に答えるために、色々頑張った末辿り着いた方法です。
encodeのオプションを渡せる作りにはなっているっぽいのですが
実際オプションを渡しても実際出てくるファイルはUTF-8でした。
試した方法たち
- オプション渡してみる
ActiveAdmin.register RfmReport do
csv encoding: 'Shift_JIS' do
column :id
column :name
end
end
- 設定ファイルに書いてみる
config/initializers/active_admin.rb
# == CSV options
#
# Set the CSV builder separator
# config.csv_options = { :col_sep => ';' }
#
# Force the use of quotes
# config.csv_options = { :force_quotes => true }
config.csv_options = { encoding: 'Shift_JIS' }
うーんおかしいなぁ・・・githubに上がってるコード読んで・・・あ!
作業しているprojectに入っているActiveAdminのcsv_builder.rb
を確認してみると
0.6?!! なんか古くね?!!!
でも、これ最新に上げて動作確認してる暇ないよぉ(´・ω・`)
というわけで、一旦付け焼き刃的方法で対処することに。
で、結局・・・
色々調べてみると、CSV出力部分を自作して既存のCSV出力リンクと置き換えるという手法が多かったのですが
それだと各レポート毎に追加しなくてはならないので面倒くさい。
なので、CSV出力させるところを強制的にShift_JISにするようにしてしまいました。
activeadmin
のapp/views/active_admin/resource/index.csv.erb
を
自分のproject配下にコピーし、csv_outputの文字コードをShift_JISに変更するようにしました。
app/views/active_admin/resource/index.csv.erb
<%-
csv_lib = if RUBY_VERSION =~ /^1.8/
require 'fastercsv'
FasterCSV
else
require 'csv'
CSV
end
default = active_admin_application.csv_options
options = default.merge active_admin_config.csv_builder.options
columns = active_admin_config.csv_builder.columns
csv_output = csv_lib.generate(options) do |csv|
csv << columns.map(&:name)
collection.each do |resource|
csv << columns.map do |column|
call_method_or_proc_on resource, column.data
end
end
end
csv_output.encode!(Encoding::SJIS, :invalid => :replace, :undef => :replace) #ここで強制的に書き換え
%>
<%= csv_output.html_safe %>
ああ、切ない。。。
今日はActiveAdminを最新にあげて、動作の確認から始めましょう。