質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

2回答

303閲覧

2以上のモデルでja.ymlが反映しない。

latte217

総合スコア19

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2020/08/12 02:23

編集2020/08/21 03:13

前提・実現したいこと

初めまして、初心者なのですが、現在登録画面にバリデーションをモデルに付与し
日本語によるエラーを表示させるべく実装しています。
多くのサイトから、userモデルにおける、実装はなんとかうまくいき
続いて、userに関する別の情報を登録するためのstaffmemberというモデルを追加し
これについても同様に、エラーの情報を日本語で表示させるためにja.ymlに
コードを追記したのですが、反映しない状況です。
インデントについても、注意し記載したのですが、そもそもの構文が
間違っているのかわからず悩んでおります。ご教授お願いいたします。

環境:Ruby on Rails 6.0

発生している問題・エラーメッセージ

下記のソースコードにおいて、user モデルに関してバリデーションエラーは正常に表示してくれますが
**staffmemberモデルの code に関するバリデーションチェックはかかっているものの下記の翻訳エラー
が発生してしまっております。
**

Code translation missing: ja.activerecord.errors.models.staffmember.attributes.code.blank

該当のソースコード

Rails

1ja: 2 activerecord: 3 errors: 4 models: 5 user: 6 attributes: 7 name: 8 blank: :空白になっています。 9 email: 10 blank: :空白になっています。 11 invalid: :正しいメールアドレスを登録ください。 12 password: 13 blank: :空白になっています。 14 too_short: :6文字以上で入力してください。 15 password_confirmation: 16 confirmation: :パスワードが一致しません。 17 18 staffmember: 19 attributes: 20 code: 21 blank: : 空白登録できません。

試したこと

locale.rbの記述
Rails.application.config.i18n.default_locale = :ja

補足情報(FW/ツールのバージョンなど)

VS-CODEにてローカル環境にて開発中です。

追加情報

モデル

class Staffmember < ApplicationRecord before_save{ self.code = code.downcase} validates :code, presence: true, uniqueness: true validates :jpn_name, presence: true validates :password, presence: true, length: {minimum: 6} validates :kana_name, presence: true validates :birthday, presence: true has_secure_password end

コントローラー

class

1 def index 2 end 3 4 def new 5 @staff = Staffmember.new 6 end 7 8 def create 9 @staff = Staffmember.new(staffmember_params) 10 if @staff.save 11 flash[:success] = "登録されました。" 12 redirect_to @staff 13 else 14 render 'new' 15 end 16 end 17 18 def show 19 @staff = Staffmember.find(params[:id]) 20 end 21 22 private 23 def staffmember_params 24 params.require(:staffmember).permit(:code, :password, :password_confirmation, :jpn_name, :kana_name, :eng_name, 25 :birthday, :sex ) 26 end 27 28end 29

ビュー

<div class="row"> <%= form_with(model: @staff, local: true) do |f| %> <%= render "shared/error_messages", object: f.object %> <section> <h2>基本情報</h2> <div class="form-group col-md-2"> <%= f.label :code, "職員番号" %> <%= f.number_field :code %> </div> <div class="form-group col-md-2"> <%= f.label :password %> <%= f.password_field :password %> </div> <div class="form-group col-md-2"> <%= f.label :password_confirmation, "Password再入力" %> <%= f.password_field :password_confirmation %> </div> <div class="form-group col-md-3"> <%= f.label :jpn_name, "氏  名" %> <%= f.text_field :jpn_name %> </div> <div class="form-group col-md-3"> <%= f.label :kana_name, "カナ氏名" %> <%= f.text_field :kana_name %> </div> <div class="form-group col-md-3"> <%= f.label :eng_name, "英字氏名" %> <%= f.text_field :eng_name %> </div> <div class="form-group col-md-2"> <%= f.label :birthday, "生年月日" %> <%= f.date_field :birthday %> </div> <div class="form-group col-md-2"> <%= f.label :sex, "性別" %> <%= f.select :sex, [['男性', 1], ['女性', 2]],{ selected: 2} %> </div> </section> <section> <h2>部署情報</h2> </section> <%= f.submit "登 録", class: "btn btn-primary" %> <% end %> </div>

#改めてインデント揃えました。

ja:

1 activerecord: 2 errors: 3 models: 4 user: 5 attributes: 6 name: 7 blank: :空白になっています。 8 email: 9 blank: :空白になっています。 10 invalid: :正しいメールアドレスを登録ください。 11 password: 12 blank: :空白になっています。 13 too_short: :6文字以上で入力してください。 14 password_confirmation: 15 confirmation: :パスワードが一致しません。 16 staffmember: 17 attributes: 18 code: 19 blank: : 空白登録できません。 20 21 attributes: 22 user: 23 name: 名前 24 email: メールアドレス 25 password_confirmation: Password 再入力 26 27コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

翻訳の方に: があるからだと思います。
:がある場合は"や'で囲ってあげてください。

yml

1blank: ": 空白登録できません。"

投稿2020/08/25 16:08

Cojiro

総合スコア539

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

latte217

2020/08/26 05:07

kojiro12345様  回答いただきありがとうございます。  問題解消いたしました!!ありがとうございます。  確かに当たり前のことが、できておらず申し訳ございません。  User側の場合は 「:」があっても、問題なく表示されていたので「””」無しでもいけるのかな?  と思ってしまっておりました。しかも、blank: の後の:のスペースが全角のスペースが入ってしまっていたこともわかりました。  大変勉強になりました。  ありがとうございます。
guest

0

ja: activerecord: errors: models: user: attributes: name: blank: :空白になっています。 email: blank: :空白になっています。 invalid: :正しいメールアドレスを登録ください。 password: blank: :空白になっています。 too_short: :6文字以上で入力してください。 password_confirmation: confirmation: :パスワードが一致しません。 staffmember: attributes: code: blank: : 空白登録できません。

インデントを揃えてみてください

投稿2020/08/12 03:49

nasuk47

総合スコア311

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

latte217

2020/08/12 07:11 編集

回答ありがとうございました。 いただいた回答をそのままコピペしたのですが、状況は変わりませんでした。 申し訳ありませんが、初心者につき提供している情報が不足しているかもしれません。 必要な情報がありましたら、ご指摘ください。
nasuk47

2020/08/12 10:22

翻訳エラーとなっているのでその翻訳を呼び出している箇所のコードが欲しいです
latte217

2020/08/14 02:36

回答ありがとうございます。 下記のnew.html.erb から shared/error_messages.html.erb (最下部に記載)を呼んでいます。 -----new.html.erb----- <h1>スタッフ登録</h1> <div class="row"> <%= form_with(model: @staff, local: true) do |f| %> <%= render "shared/error_messages", object: f.object %> <section> <h2>基本情報</h2> <div class="form-group col-md-2"> <%= f.label :code, "職員番号" %> <%= f.number_field :code %> </div>  以下中略  </section>   <%= f.submit "登 録", class: "btn btn-primary" %> <% end %> </div> -----shared/error_messages.html.erb ------ <% if object.errors.any? %> <div id="error_explanation"> <div class="alert alert-danger"> <%= object.errors.count %> 箇所エラーがあります。 </div> <ul> <% object.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> ↑ これらのコードということでよかったでしょうか どうぞよろしくお願いいたします。
nasuk47

2020/08/14 11:13

コードは質問に追記するようお願いします。 errors.full_messgesの中身にはどのような値が入っていますか?
latte217

2020/08/17 03:06 編集

回答ありがとうございます。返信遅れまして申し訳ありません。 staff = Staffmember.new(code: "") staff.save により (0.1ms) begin transaction Staffmember Exists? (1.2ms) SELECT 1 AS one FROM "staffmembers" WHERE "staffmembers"."code" = ? LIMIT ? [["code", ""], ["LIMIT", 1]] (0.0ms) rollback transaction => false その後、 irb(main):007:0> staff.errors.full_messages で確認しました。内容は以下となります。 => ["Code translation missing: ja.activerecord.errors.models.staffmember.attributes.code.blank"] こちらでよろしいでしょうか。 なお、カラムはほかにもあるため、同様のエラーが続いております。 お手数をおかけしますがご確認お願いいたします。 また、コードについては、今後質問に追記するようにいたします。 ご指摘ありがとうございます。
nasuk47

2020/08/17 09:42

モデル、ビュー、コントローラの該当箇所のコードを質問の方に追記お願いします。 あ、質問の方編集できます。
latte217

2020/08/20 05:16

nasuk47様 回答いただきありがとうございます。 質問のほうに追記させていただきました。 ご指導お願いいたします。
nasuk47

2020/08/20 10:37

userの方では翻訳の表示はいけていたのですよね? それで同じようにstaffmemberを書いてダメなのは不思議です。 該当のソースコードを見るとまだインデントが揃っていないように見えるのでインデントを揃えたものに書き換えていただいてもいいですか?
latte217

2020/08/21 03:23 編集

nasuk47様 たびたびありがとうございます。 改めてインデントをそろえたのですが、変化なしで同様のエラーがでます。 User登録画面で空白で登録しようとすると正常に翻訳されたエラーが表示されてきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問