やりたいこと
タスク管理アプリでタスクに登録できる「開始日」と「終了日」が逆転しないようにValidationをかけたい。
方法
思っていた以上に簡単に実装できました!!
・Step①: モデルにValidationを作成
・Step②: エラーメッセージの日本語化
Step①: モデルにValidationを作成
class Task < ApplicationRecord
:
validate :start_end_check
def start_end_check
errors.add(:end_date, "は開始日より前の日付は登録できません。") unless
self.start_date < self.end_date
end
end
<実際の画面>
Step②: エラーメッセージの日本語化
このままだと「End Dateは開始日より前の日付で登録できません」とルー語も甚だしいので、
日本語化しました(ここでは詳細は省きますが、ja.ymlファイルに以下のように記述。)
---
ja:
activerecord:
:
task:
task_title: "タイトル"
start_date: "開始日"
end_date: "終了日"
:
<実際の画面>
やりたかったことができました!!
良い感じです。
errors.add について
しっかり公式も確認しておきます。
Railsガイド:Active Record バリデーション
errors.add
addメソッドを使って、特定の属性に関連するエラーメッセージを手動で追加できます。このメソッドは属性とエラーメッセージを引数として受け取ります。
errors.full_messages
errors.full_messages(または同等のerrors.to_a)メソッドは、エラーメッセージをユーザーが読みやすい形式で返します。以下のように、メッセージごとに頭が大文字の属性名を冒頭に追加します。
errors.add(:属性名, "エラーメッセージ")
となっていて、errors.full_messagesで呼び出せる。
このとき、メッセージの冒頭には先頭大文字の属性名が追加される。
まとめ
基本的にはrailsが自動で作成してくれるものを使用していたので、errors.addでメッセージを手動で作るやりかたを初めて知りました!
まだまだ知らないことがたくさん⋯日々精進します!
ちなみに⋯
またしても、エラー文で表示が崩れてしまいました。
しかし、1度対処しているので冷静に解決することができました!
エラー文表示のレイアウト崩れについても記事にしておりますので、同じような現象が起こってしまった方はぜひこちらも参照いただけますと幸いです^^
参考