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

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

ただいまの
回答率

87.94%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 334

score 5

前提・実現したいこと

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

環境:Ruby on Rails 6.0

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

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

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

該当のソースコード

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

          staffmember:
            attributes:
                code:
                    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

コントローラー

  def index
  end

  def new
    @staff = Staffmember.new
  end

  def create
    @staff = Staffmember.new(staffmember_params)
    if @staff.save
      flash[:success] = "登録されました。"
      redirect_to @staff
    else
      render 'new'
    end
  end

  def show
    @staff = Staffmember.find(params[:id])
  end

   private
      def staffmember_params
        params.require(:staffmember).permit(:code, :password, :password_confirmation, :jpn_name, :kana_name, :eng_name, 
        :birthday, :sex )
      end

end

ビュー

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

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

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

    attributes:
      user:
        name: 名前
        email: メールアドレス
        password_confirmation: Password 再入力

コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/26 14:07

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

    キャンセル

+1

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/20 14:16

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

    キャンセル

  • 2020/08/20 19:37

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

    キャンセル

  • 2020/08/21 12:16 編集

    nasuk47様 たびたびありがとうございます。

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

    キャンセル

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

  • ただいまの回答率 87.94%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る