2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railsで日本語ヘッダのCSVを読み込む

Last updated at Posted at 2022-02-12

Railsで日本語ヘッダを持つCSVファイルを読み込む

想定: ユーザにCSVをアップロードしてもらい処理を行う。その際のヘッダー名に日本語を使いたい場合の書き方
結論: i18_nを使ってマッピングします。

サンプルCSV

名前,かな
テスト,てすと
太郎,たろう

いまいちな書き方

CSV.foreach("user.csv", headers: true) { |row| puts row['名前'] }
テスト
太郎

いまいちな理由

  • headerを日本語以外に変更する場合にコード修正が必要になる
  • インスタンスを作成する場合のコードが冗長になる
User.new({name: row['名前'], kana: row['かな']})

2カラムぐらいなら問題ないですが、増えてくると可読性が下がります。

おすすめの書き方

config/locales/models/user.ja.yml を作成してマッピングを行います。

マッピング用ymlファイル

ja:
  activerecord:
    attributes:
     user:
      headers:
        name: 名前
        kana: かな

これを使って、マッピングします。

headers = I18n.t('activemodel.attributes.user.headers')
CSV.foreach("user.csv", headers: true) { |row| puts headers.to_h {|k, v| [k, row[v]]} }
{:name=>"テスト", :kana=>"てすと"}
{:name=>"太郎", :kana=>"たろう"}

こうなります。
この状態であれば、英語を追加したい場合はen.ymlを追加すれば済みます。
またインスタンスを作成する際にもサクッとできます。

User.new({headers.to_h {|k, v| [k, row[v]]}})
2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?