1 Jan 2014

Rails 4 エラーメッセージを完全に上書きする

メッセージを上書きしたいときはオプションで presence: { message: 'Select at least one category' } の様にメッセージを渡してあげれば良いです。
だけど、それだと主語が先頭に来てしまい"Category Select at least one category"というエラーメッセージになってしまう。

全てのメッセージを上書きしたいときはlambdaを渡してあげればよい。

validates :categories, presence: { message: -> {|location, error| raise [location, error].inspect }  }

# => [:"activerecord.errors.models.website.attributes.categories.blank", {:model=>"Website", :attribute=>"Categories", :value=>#<ActiveRecord::Associations::CollectionProxy []> }]