[Rails] 오류 메시지를 개별적으로 표시하는 방법

목표



개발 환경


・Rubby:2.5.7
・Rails:5.2.4
・Vagrant:2.2.7
・VirtualBox:6.1
・OS:macOS Catallina

전제 조건


다음은 이미 실현되었다.
슬림 가져오기
발언 기능 설치

이루어지다


1. application.편집


application.rb
module Bookers2Debug
  class Application < Rails::Application
    config.load_defaults 5.2

    # 追記
    config.action_view.field_error_proc = Proc.new do |html_tag, instance|
      if instance.kind_of?(ActionView::Helpers::Tags::Label)
        html_tag.html_safe
      else
        class_name = instance.object.class.name.underscore
        method_name = instance.instance_variable_get(:@method_name)
        "<div class=\"has-error\">#{html_tag}
          <span class=\"help-block\">
            #{I18n.t("activerecord.attributes.#{class_name}.#{method_name}")}
            #{instance.error_message.first}
          </span>
        </div>".html_safe
      end
    end
  end
end

[해설]


① 오류가 발생하지 않은 경우 HTML을 직접 표시합니다.

if instance.kind_of?(ActionView::Helpers::Tags::Label)
  html_tag.html_safe

② 오류가 발생하면 양식 아래에 오류 메시지가 표시됩니다.

else
  class_name = instance.object.class.name.underscore
  method_name = instance.instance_variable_get(:@method_name)
  "<div class=\"has-error\">#{html_tag}
    <span class=\"help-block\">
      #{I18n.t("activerecord.attributes.#{class_name}.#{method_name}")}
      #{instance.error_message.first}
    </span>
  </div>".html_safe
◇실례의 클래스 이름을 변수에 대입하다
class_name = instance.object.class.name.underscore
◇실례적인 방법 명칭을 변수에 대입하다
method_name = instance.instance_variable_get(:@method_name)
◇오류 메시지 섹션의 HTML을 만듭니다.
"<div class=\"has-error\">#{html_tag}
  <span class=\"help-block\">
    #{I18n.t("activerecord.attributes.#{class_name}.#{method_name}")}
    #{instance.error_message.first}
  </span>
</div>".html_safe
제목 입력#{I18n.t("activerecord.attributes.#{class_name}.#{method_name}")}제목에 해당하는 섹션#{instance.error_message.first}은 입력하십시오.

2. 오류 메시지 일본어화


①Gem 도입


Gemfile
# 追記
gem 'rails-i18n'
단말기
$ bundle

② application.편집


application.rb
module Bookers2Debug
  class Application < Rails::Application
    config.load_defaults 5.2
    config.i18n.default_locale = :ja # 追記

    config.action_view.field_error_proc = Proc.new do |html_tag, instance|
      if instance.kind_of?(ActionView::Helpers::Tags::Label)
        html_tag.html_safe
      else
        class_name = instance.object.class.name.underscore
        method_name = instance.instance_variable_get(:@method_name)
        "<div class=\"has-error\">#{html_tag}
          <span class=\"help-block\">
            #{I18n.t("activerecord.attributes.#{class_name}.#{method_name}")}
            #{instance.error_message.first}
          </span>
        </div>".html_safe
      end
    end
  end
end

③ ja.작성 및 편집


단말기
$ touch config/locales/ja.yml
ja.yml
ja:
  activerecord:
    attributes:
      book:
        title: タイトル
        body: 本文

좋은 웹페이지 즐겨찾기