3
1

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 3 years have passed since last update.

【Rails】バリデーションエラーメッセージの日本語化〜ja.yml〜

Posted at

解決したいこと

エラーメッセージを日本語化していたところ、日本語化されないカラムがある。
userとitemは問題なく日本語化ができた。

該当するソースコード

ja:
  activerecord:
    attributes:
      user:
        nickname: ニックネーム
        last_name: お名前(名字)
        first_name: お名前(名前)
        last_name_kana: お名前カナ(名字)
        first_name_kana: お名前カナ(名前)
        birthday: 生年月日

      item:
        name: 商品名
        image: 出品画像
        introduction: 商品の説明
        category_id: カテゴリー 
        status_id: 商品の状態
        postage_id: 配送料の負担
        prefecture_id: 発送元の地域
        days_to_ship_id: 発送までの日数
        price: 販売価格
        
      user_destination:          ⬅️ここを日本語化したい
        post_code: 郵便番号
        prefecture_id: 都道府県
        city: 市区町村
        address: 番地
        phone_number: 電話番号

自分で試したこと

user_destinationをdestinationに変えてみたり・・・
destinationsに変えてみたり・・・


% bundle exec rspec spec/models/user_destination_spec.rb
..

    20: 
    21:     context '新規登録がうまくいかないとき' do
    22:       it '郵便番号が必須であること' do
    23:         @user_destination.post_code = ''
    24:         @user_destination.valid?
 => 25:         binding.pry
    26:         expect(@user_destination.errors.full_messages).to include("Post code can't be blank")
    27:       end
    28: 
    29:       it '郵便番号にはハイフンが必須であること' do
    30:         @user_destination.post_code = '1234567'

[1] pry(#<RSpec::ExampleGroups::UserDestination::Nested::Nested_2>)> @user_destination.errors.full_messages
=> ["Post codeを入力してください", "Post codeは不正な値です"]
[2] pry(#<RSpec::ExampleGroups::UserDestination::Nested::Nested_2>)> exit
FFFFFFFFFFFF


何度やってもPost codeが郵便番号にならない。
こちらの記事に辿り着きしっかり読ませてもらいました。
https://qiita.com/okeicalm/items/9638250ddfb361d80a16

activerecord:
models:
user: ユーザー
という記述を眺めていたらふと気付く。

んん?activerecordってなんだっけ?
各モデルファイルを見てみるとuser_destinationモデルにはActiveModelと記述してある。
これはもしかして・・・

ja:
  activerecord:
    attributes:
      user:
        nickname: ニックネーム
        last_name: お名前(名字)
        first_name: お名前(名前)
        last_name_kana: お名前カナ(名字)
        first_name_kana: お名前カナ(名前)
        birthday: 生年月日

      item:
        name: 商品名
        image: 出品画像
        introduction: 商品の説明
        category_id: カテゴリー 
        status_id: 商品の状態
        postage_id: 配送料の負担
        prefecture_id: 発送元の地域
        days_to_ship_id: 発送までの日数
        price: 販売価格

  activemodel:          ⬅️階層を変更して記述した
    attributes:
      user_destination:
        post_code: 郵便番号
        prefecture_id: 都道府県
        city: 市区町村
        address: 番地
        phone_number: 電話番号

% bundle exec rspec spec/models/user_destination_spec.rb
..

    20: 
    21:     context '新規登録がうまくいかないとき' do
    22:       it '郵便番号が必須であること' do
    23:         @user_destination.post_code = ''
    24:         @user_destination.valid?
 => 25:         binding.pry
    26:         expect(@user_destination.errors.full_messages).to include("Post code can't be blank")
    27:       end
    28: 
    29:       it '郵便番号にはハイフンが必須であること' do
    30:         @user_destination.post_code = '1234567'

[1] pry(#<RSpec::ExampleGroups::UserDestination::Nested::Nested_2>)> @user_destination.errors.full_messages
=> ["郵便番号を入力してください", "郵便番号は不正な値です"]


日本語化されてる!
結果としてはActive RecordとActive Modelはそもそも種類が違うのでactiverecord:のくくりに入れてできるわけがない、ということでした。

今日も勉強になりました。

3
1
0

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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?