プログラミング勉強中、機能を実装したので備忘録として残します。
初心者のため、間違っている箇所あるかもですがご了承ください。
エラーの表示方法
参考資料
https://qiita.com/satreu16/items/a072a4be415f30087ed7
https://note.com/hbkk/n/ndc2c306696b2
https://blog.yuhiisk.com/archive/2018/05/22/rails-display-error-message.html
Rails エラーメッセージの出し方 バリデーションエラー - Qiita
Model
post.rb
class Post < ApplicationRecord
belongs_to :user
# content カラムのみ入力を禁止。140文字までしか入力を認めないよう設定。
validates :content, presence: true, length: { maximum: 140 }
end
View
new.html.erb
<%= form_with model: @post, local: true, html: {class: "form_area"} do |f| %>
<div class="form_area__field">
# エラーの場合 layouts/error_messages に遷移, object という名前で遷移先にエラーメッセージを渡す。
<%= render 'layouts/error_messages', object: f.object %>
<%= f.text_area :content, id: "post_text", placeholder: "投稿内容を入力", rows: 10 %>
<div class="form_area__hidden_field">
<%= hidden_field :post, :user_id, value: current_user.id %>
</div>
<div class="form_area__action">
<%= f.submit "投稿", class: "form_area__action__btn" %>
</div>
</div>
error_messages.erb
# error が格納されているか確認
<% if object.errors.any? %>
<div class="vali_alert">
<ul>
# エラーメッセージを全て取得。each 文で回す。
<% object.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
他のフォームでも使用できるようにエラーメッセージを部品化することをパーシャルという。
エラーメッセージの日本語化
参考資料
[初学者]Railsのi18nによる日本語化対応 - Qiita
Gem のインストール
gem 'rails-i18n'
bundle install 実施
config/application.rb に追記
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
locales/ja.yml を作成
ja:
activerecord:
attributes:
# 日本語設定したいモデル名
post:
# カラム名と対応させたい日本語
content: 'コンテンツ'