はじめに
Railsで簡単な掲示板サイトを作っていた時に、ページ(今回はプロフィール画面)のカラムが期待通りに表示されておらず、なかなか原因が分からなかった事がありました。
環境
ruby 3.14
rails 7.0.3.1
目次
事例
activerecord.ja.ymlファイル
別の方法
まとめ
事例
Railsで簡単な掲示板サイトを作っていた時に、profileページが期待通りに表示されませんでした。
メールアドレスや氏名がちゃんと表示されているにも関わらず、アバターだけがAvatarと英語表記になってしまっています。
profiles/edit.html.erb
<div class="mb-3">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: 'form-control' %>
</div>
<div class="mb-3">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: 'form-control' %>
</div>
<div>
<%= form.label :avatar %>
<%= form.file_field :avatar, class: "form-control", accept: 'image/*' %>
<%= form.hidden_field :avatar_cache %>
</div>
form_withの書き方が間違っているのか、しかし他のカラムはしっかり表示されているのになぜ…。
activerecord.ja.ymlファイル
i18nというgemがあります。Railsではデフォルトで入っている、様々な言語に対応するためのものですね。
これを用いるのに必要なファイルが、ja.ymlファイルとactiverecord.ja.ymlファイル。
今回関わってくるのは後者のactiverecord.ja.ymlファイル。
このファイルは「このテーブルのこのカラムは〇〇と表記してね」とカスタマイズすることが出来る大変便利な機能ですが、この機能のありがたさが当時はあまりピンと来ておらず、「とりあえず書くのが決まり」と解釈していました。
今回edit.html.erbで書いた:avatarは、Userテーブルのavatarというカラム。
config/locales/activerecord.ja.ymlファイルを確認してみる。
他のカラムは登録されているのだが、今回はavatarはまだ登録されていない。
早速登録してみましょう
これでUserテーブルのカラムであるavatarに”アバター”と名前をつける事で、逐一form_withを使う時に、〇〇とか書かなくても大丈夫なようになった。
ブラウザの方も確認してみると、
無事解決。
ちなみに開発者ツールを使うと次のような構成になっているのが分かる。
activerecord.ja.ymlファイルに記述しない場合
activerecord.ja.ymlファイルに記述しない場合
別の方法
i18nにコードを追加しない場合は、以下の画像2行目のように表示させたい言葉、つまり"アバター"と書いてしまうのもあり。
しかしながら、i18nを利用すれば、後々コードが膨大になった後で修正する際には便利。
まとめ
サイトを作り始めの時は、activerecord.ja.ymlファイルやja.ymlファイルに記述するのは手間ですが、数箇所form_withを使う状況になることもあり得るので、活用してしまった方が便利。
「システムテストをして、実装が正確に行われているかを判断する場合」ではテストに通らない原因となるので、詰まった際にはactiverecord.ja.ymlへのコードの書き忘れも念頭においた方が良いかもしれません。