前提・実現したいこと
Railsで簡単な日記アプリを作成しています。
日記(bookモデル)の新規登録時に、合わせてユーザー名を登録します。
その際のユーザー名の空欄エラーの日本語化をしたいのですが、いまいちどのように行ったらよいかわからなかったため、相談させてください。
1つのBookに対して2人のユーザーを紐づけたいので、BookはUserをhas_manyする関係になっています。
エラーメッセージ
現状こんな感じで、ユーザー名だけ「User name」になってしまいます。
デバッグ情報で見てみると、エラーメッセージ の中身が
:"users.name"=>[{:error=>:blank}]
となっているのですが、このusers.name
をja.ymlでどのように変えれば良いのかわかりません。
該当のソースコード
- ja.yml
--- ja: activerecord: errors: messages: record_invalid: 'バリデーションに失敗しました: %{errors}' restrict_dependent_destroy: has_one: "%{record}が存在しているので削除できません" has_many: "%{record}が存在しているので削除できません" models: book: 日記 user: ユーザー post: 投稿 attributes: book: name: タイトル password: パスワード password_confirmation: パスワードの確認 user: name: 名前 image: プロフィール画像 post: content: 内容 #省略 errors: format: "%{attribute}%{message}" messages: accepted: を受諾してください blank: を入力してください confirmation: と%{attribute}の入力が一致しません empty: を入力してください equal_to: は%{count}にしてください even: は偶数にしてください exclusion: は予約されています greater_than: は%{count}より大きい値にしてください greater_than_or_equal_to: は%{count}以上の値にしてください inclusion: は一覧にありません invalid: は不正な値です less_than: は%{count}より小さい値にしてください less_than_or_equal_to: は%{count}以下の値にしてください model_invalid: 'バリデーションに失敗しました: %{errors}' not_a_number: は数値で入力してください not_an_integer: は整数で入力してください odd: は奇数にしてください other_than: は%{count}以外の値にしてください present: は入力しないでください required: を入力してください taken: はすでに存在します too_long: は%{count}文字以内で入力してください too_short: は%{count}文字以上で入力してください wrong_length: は%{count}文字で入力してください template: body: 次の項目を確認してください header: one: "%{model}にエラーが発生しました" other: "%{model}に%{count}個のエラーが発生しました" helpers: select: prompt: 選択してください submit: create: 登録する submit: 保存する update: 更新する #省略
- デバッグ情報
(byebug) @book.errors #<ActiveModel::Errors:0x00007fa5574d7480 @base=#<Book id: nil, name: "", created_at: nil, updated_at: nil, password_digest: nil>, @messages={:name=>["を入力してください"], :"users.name"=>["を入力してください"], :password=>["を入力してください", "は5文字以上で入力してください"], :password_confirmation=>[]}, @details={:name=>[{:error=>:blank}], :"users.name"=>[{:error=>:blank}], :password=>[{:error=>:blank}, {:error=>:blank}, {:error=>:too_short, :count=>5}]}> (byebug) Completed 200 OK in 110939ms (Views: 131.0ms | ActiveRecord: 0.2ms)
- 新規登録画面
- provide(:title, 'Create a Nikki') h1 日記を作ろう p 君たちの日記を作ろう。 = form_with model: @book , local: true do |f| == render 'shared/error_messages' = f.label :name, '日記のタイトル' = f.text_field :name, class:'form-control' = f.label :password, 'パスワード' = f.password_field :password, class:'form-control' = f.label :password_confirmation, 'パスワード(確認)' = f.password_field :password_confirmation, class:'form-control' - @book.users.each do |user| = f.fields_for :users, user do |i| = i.label :name, 'ユーザー名' = i.text_field :name, class: 'form_control' = f.submit 'つくる', class: 'btn btn-prymary'
試したこと
とりあえずこんな感じで足してみましたが、もちろんダメでした・・・!
attributes: book: name: タイトル password: パスワード password_confirmation: パスワードの確認 users.name: ユーザー名
補足情報(FW/ツールのバージョンなど)
rails 5.2.3
ruby 2.6.3p62
あなたの回答
tips
プレビュー