Step by Step Ruby on Rails

Ruby on Railsで実際にWebサイトを構築する手順をまとめています。

Active AdminでCSVファイルのインポート、エクスポート

Active AdminでCSVファイルのインポート、エクスポートを行う方法をまとめました。
下記記事の方法でインストール、初期設定をしている事を前提としています。
Active Adminのインストール方法
 
(1)CSVファイルをインポート
 
1)active_admin_importableをインストール
 
まず"active_admin_importable"をインストールします。
 
①Gemfileに追加
 
$ vi Gemfile
 
gem 'active_admin_importable'
 
②インストール
 
$ bundle install
  :
Installing active_admin_importable (1.1.2)
 
2)CSVインポートを有効にする
 
Active Adminで管理しているAuthorモデルでCSVインポートを有効にする場合を例とします。
 
$ vi app/admin/author.rb
 
下記行を追加します。
active_admin_importable
 
3)動作確認
 
①ブラウザで管理画面にアクセスすると、"Author"ページの右上に"Import Authors"ボタンが表示されます。
 
②ボタンを押下するとファイル選択画面が表示されるので、インポートするCSVファイル名を指定します。
 
4)CSVファイル作成時の注意点
 
CSVファイルインポート時に
"\xEF" from ASCII-8BIT to UTF-8
のエラーが発生しました。CSVファイル作成時に注意する点をまとめました。
 
①文字コードはUTF-8ではなく、UTF-8Nにする。
 
②改行コードは、LFにする。CRLFにするとインポート時に重複して登録されてしまいました。
 
③CSVファイルの先頭に各カラムの名前を記述したヘッダを記述する。
 
例)
Name,Address,Lat,Lng,・・・
 
④Railsで自動採番される"ID"カラムは省略可能。
 
⑤同じくRailsで自動で登録される"Created at","Updated at"については、ヘッダ行に記述していないと下記エラーが発生。
 
unknown attribute:
 
データ部の"Created at","Updated at"に該当するカンマは省略していても問題なさそうでした。
 
(2)CSVファイルでエクスポート
 
Active Adminの各モデルを表示するページの左下に"Download:CSV XML JSON"のリンクがあり、リンクを押下すると指定したフォーマットでダウンロードする事が出来ます。
 
●CSVダウンロードをカスタマイズするには?
 
①ダウンロードするカラムを設定する
 
例えば、authorモデルのfirst_nameとlast_nameのみダウンロードしたい場合は次のように設定します。
 
$ vi app/admin/author.rb

csv do
  column :first_name
  column :last_name
end

 
②外部キーから名前に変換してダウンロードする場合
 
bookモデルの著者IDとジャンルIDの外部キーから名前に変換してダウンロードするように設定する例です。
 
$ vi app/admin/book.rb

csv do
  column :name
  column("Author") { |book| book.author.to_s }
  column("Genre") { |book| book.genre.name }
  column :price
end