検証の失敗に起因するエラーメッセージにいくつかの追加情報を表示したいと思います。たとえば、次の検証を含むクラスBookがあるとします。
validates :name, presence: true, uniqueness: true
誰かが同じ名前の本を挿入しようとすると、次のエラーメッセージが返されます
{"name":["has already been taken"]}
代わりに見せたい
{"name":["Book 'Great Expectaions' has already been taken at id:7"]}
今これを実現するには、上記の一意性の検証を削除して、次のことを行う必要があります
validate do |book|
existing_book = Book.find_by_name(book.name)
if existing_book
book.errors.add(:name, "#{existing_book.name} already exists at id: #{existing_book.id}")
end
end
カスタムの一意性検証を記述せずに、上記のようなカスタムエラーメッセージを取得する方法はありますか?私はの線に沿って何かを考えていました
validates :name, presence: true, uniqueness: {message: "#{self.name} already exists at id: #{Book.find_by_name(self.name).id}"
しかし、self.nameが「Book」を返すため、これは機能しないようです。このコンテキストで渡されたパラメーターにアクセスする方法はありますか?