Railsのi18nを利用して完全なエラーメッセージを取得する
Rails2.2からi18nを使って各種メッセージを日本語化出来るようになったが、
普通にerror_message_onを使うと・・・
error_message_on(:user, :name) => "を入力してください。"
これでは困るので、第3引数に項目名を渡す必要がある。
例えば、@user.nameが未入力の場合、以下のようにすると完全なエラーメッセージを取得できる。
#第3引数に"User.human_attribute_name('name')"を渡す error_message_on(:user, :name, User.human_attribute_name('name')) => "名前を入力してください。"
毎回これをやるのは大変なので、ヘルパーにして使ってます。
app/helpers/application_helper.rb
# フィールドのエラーメッセージを1つ取り出す # #== 使用例 # <%= full_error_message_on(:user, :name) %> # #+object+:: オブジェクト名 #+method+:: メソッド名 #+css_class+:: エラーメッセージを囲むdivタグに指定するクラス名 #==戻り値 # エラーメッセージ。エラーがない場合はnil module ApplicationHelper def full_error_message_on(object, method, css_class = 'formError') obj = instance_variable_get("@#{object}") prepend_text = obj.class.human_attribute_name(method.to_s) errors = obj.errors[method.to_sym] if errors.is_a?(Array) && errors.size > 0 content_tag("div", "#{prepend_text}#{errors.first}", :class => css_class) end end end