custom_error_message
Advanced tools
| module ActiveRecord | ||
| class Errors | ||
| # Redefine the ActiveRecord::Errors::full_messages method: | ||
| # Returns all the full error messages in an array. 'Base' messages are handled as usual. | ||
| # Non-base messages are prefixed with the attribute name as usual UNLESS | ||
| # (1) they begin with '^' in which case the attribute name is omitted. | ||
| # E.g. validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service' | ||
| # (2) the message is a proc, in which case the proc is invoked on the model object. | ||
| # E.g. validates_presence_of :assessment_answer_option_id, | ||
| # :message => Proc.new { |aa| "#{aa.label} (#{aa.group_label}) is required" } | ||
| # which gives an error message like: | ||
| # Rate (Accuracy) is required | ||
| def full_messages | ||
@@ -33,5 +22,37 @@ full_messages = [] | ||
| return full_messages | ||
| full_messages | ||
| end | ||
| end | ||
| end | ||
| module ActiveModel | ||
| class Errors < ActiveSupport::OrderedHash | ||
| def full_messages | ||
| full_messages = [] | ||
| each do |attribute, messages| | ||
| messages = Array.wrap(messages) | ||
| next if messages.empty? | ||
| if attribute == :base | ||
| messages.each {|m| full_messages << m } | ||
| else | ||
| attr_name = attribute.to_s.gsub('.', '_').humanize | ||
| attr_name = @base.class.human_attribute_name(attribute, :default => attr_name) | ||
| options = { :default => "%{attribute} %{message}", :attribute => attr_name } | ||
| messages.each do |m| | ||
| if m =~ /^\^/ | ||
| full_messages << I18n.t(:"errors.format.full_message", options.merge(:message => m[1..-1], :default => "%{message}")) | ||
| else | ||
| full_messages << I18n.t(:"errors.format", options.merge(:message => m)) | ||
| end | ||
| end | ||
| end | ||
| end | ||
| full_messages | ||
| end | ||
| end | ||
| end |