Rails

Ruby on Rails の ActiveRecord でバリデーションエラー取得時に、翻訳済みのフルのエラーメッセージとアトリビュート名を同時に取得する

More than 1 year has passed since last update.

問題

Ruby on Rails では、モデルにバリデーションエラーを設定していた場合、 #errors でエラーの内容を取得出来ます。

full_messages では、アトリビュート名を含んだフルのメッセージを取得出来ますが、アトリビュート名は取得出来ません。

> person = Person.create
> person.errors.full_messages
=> ["年齢は数値で入力してください", "年齢を入力してください"]

messages ではアトリビュートとエラーの対が取得出来ますが、フルのメッセージは取得出来ません。

> person.errors.messages
=> {:age=>["は数値で入力してください", "を入力してください"]}

解決

to_hash に引数を与えることで、双方を取得出来ます。

> person.errors.to_hash(true)
=> {:age=>["年齢は数値で入力してください", "年齢を入力してください"]}

http://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-to_hash