Rails
yml

rails モデルのカラム名(論理名)を定義してviewやcsvヘッダ名に使う

フォーム作成時のフィールドのラベルやView内でのテーブルヘッダ、CSV出力時のヘッダを別ファイルで定義して呼び出す。i18nというgemを使用する。

利用シーン

いくつかの場面で、定義を呼び出せるようになっています。

form_for

・呼び出し方法
f.label :カラム名

xxx.html.erb
<%= form_for(@user, url: users_path) do |f| %>
  <div>
    <%= f.label :email %>
    <%= f.label :name %>
  </div>
<% end %>

CSVのヘッダ名

・呼び出し方法
モデル.human_attribute_name("カラム名")

xxx.csv.ruby
CSV.generate do |csv|
  cols = [
    User.human_attribute_name("email"),
    User.human_attribute_name("name"),
    User.human_attribute_name("address"),    
  ]

view内でのモデル名やカラム名の呼び出し(CSVのヘッダ名の例と呼び出し方法は同じ)

・呼び出し方法
モデル.human_attribute_name("カラム名")

xxx.erb.html
<table>
  <tr>
    <th><%= User.human_attribute_name("email")</th>
    <th><%= User.human_attribute_name("name")</th>
  </tr>
</table>

定義

ここではi18nという多言語対応を目的としたgemを利用することで、日本語の辞書を作成し、それを呼び出すようにします。

手順1

config/application.rbに以下をセット

application.rb
config.i18n.default_locale = :ja

※セットしない場合はdefaultはen(英語)なので、のちに定義するja.ymlが呼び出されません。

手順2

config/locales/ja.ymlを作成し定義を書く

ja.yml
ja:
  activerecord:
    models:
      want_list: 欲しいもの
      user: ユーザ
    attributes:
      user:
        name: 名前
        email: メールアドレス
        address: 住所
        password: 新しいパスワード
        password_confirmation: パスワード確認用(新しいパスワードを入力)
        current_password: 現在のパスワード
      want_list:
        id: id
        product: 欲しいもの
        url: URL
        comment: コメント
        want_lists_count: いいね

以上です。