#はじめに
has_manyやbelongs_toで関連性を持たせた子(親)モデルの値ををひとつのフォームで編集する場合、fields_forを使いますが、これが2階層の入れ子になった場合、object.errorsのkeyが 「:"user.blog_user.posts.title"」のように、config/locals/modelsで引けない値となってしまい、バリデーションエラーの際に「User Blog user Posts Title タイトルは入力されていません」といったエラーメッセージになり、ローカライズ失敗するところを対応するメソッドを書きました。
error_helper.rb
def error_messages(object)
object.errors.keys.each do |key|
if key.to_s.index(".").present?
part = key.to_s.split(".")
new_key = "#{part[-2].singularize}.#{part[-1]}"
o.errors[key].each do |val|
o.errors.add(new_key.to_sym, val)
end
o.errors.delete(key)
end
end
return o.errors.full_messages.join('<br />')
end