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