ActiveForm のエラーメッセージを日本語化
趣旨
任意のクラスに対して ActiveRecord 風の validation が掛けられるようになる ActiveForm plugin。便利だが、一つの問題は、<%= error_messages_for 'active_form_object' %>
としたとき、エラーメッセージの前半部が「priceは不正な値です」みたいになってしまってかっこ悪い。
ActiveHeart の set_field_names を使えば、この「価格は不正な値です」と表示させられる。ただし、これは ActiveRecord::Base なクラスに対してだけである。
ハック
プラグイン自体をいじるのは美しくないが、今回は面倒なので、ActiveForm 自体を改造してしまうことにする。vendor/plugin/(ActiveFormディレクトリ)/lib/active_form.rb の中から、
def self.human_attribute_name(attribute_key_name) attribute_key_name.humanize end
を
class << self def set_field_names(field_names = {}) @field_names = HashWithIndifferentAccess.new unless @field_names @field_names.update(field_names) end def human_attribute_name(attribute_key_name) if @field_names && @field_names[attribute_key_name] @field_names[attribute_key_name] else attribute_key_name.humanize end end end
に置き換えるだけ。後半部のコードは ActiveHeart をほぼコピーしただけである。(一部変えてある)要するに human_attribute_name を日本語化してあげようというわけだ。これで、ActiveRecord::Base に対してと同じように ActiveForm なクラスに対しても、set_field_names が使えるようになる。