module ActionView module Helpers module ActiveRecordHelper # Geef een string terug met een DIV met daarin alle foutmeldingen voor de objecten waarvan de instantie variabel namen # gegeven zijn. Als er meerder objecten gespecificieerd zijn, worden de foutmeldingen getoond in de volgorde dat de object # namen door gegeven zijn. # # Deze DIV kan aangepast worden met de volgende opties: # # * header_tag - Gebruikt in de kop van de foutmeldingen div (standaard: h2) # * id - Het id van de foutmeldingen div (standaard: errorExplanation) # * class - De class van de foutmeldingen div (standaard: errorExplanation) # * object_name - De object naam om te gebruiken in de kop, of een andere tekst. Als object_name niet gegeven wordt, wordt van het eerste object de human_name class methode geprobeerd. Als die methode niet beschikbaar is, wordt de eerste gegeven object naam gebruikt. # # Voorbeelden: # # error_messages_for :user # # error_messages_for :user, :address, :object_name => 'gebruiker' def error_messages_for(*params) options = Hash === params.last ? params.pop.symbolize_keys : {} objects = params.collect {|object_name| instance_variable_get("@#{object_name}") } count = objects.compact.inject(0) {|sum, object| sum + object.errors.count } unless count.zero? html = {} [:id, :class].each do |key| if options.include?(key) value = options[key] html[key] = value unless value.blank? else html[key] = 'errorExplanation' end end human_name = if options[:object_name] options[:object_name] elsif objects.first && objects.first.class.respond_to?(:human_name) objects.first.class.human_name else params.first.to_s.gsub('_', ' ') end header_message = "Vanwege #{pluralize(count, 'probleem', 'problemen')} kan #{human_name} niet opgeslagen worden" error_messages = objects.map {|object| object.errors.full_messages.map {|msg| content_tag(:li, msg) } } content_tag(:div, content_tag(options[:header_tag] || :h2, header_message) << content_tag(:p, count == 1 ? 'Er is een probleem met het volgende veld:' : 'Er zijn problemen met de volgende velden:') << content_tag(:ul, error_messages), html ) else '' end end end end end ActiveRecord::Errors.default_error_messages = { :inclusion => "valt niet binnen de lijst", :exclusion => "is gereserveerd", :invalid => "is niet geldig", :confirmation => "komt niet overeen met bevestiging", :accepted => "moet geaccepteerd worden", :empty => "mag niet leeg zijn", :blank => "mag niet blanco zijn", :too_long => "is te lang (max is %d karakters)", :too_short => "is te kort (min is %d karakters)", :wrong_length => "is de verkeerde lengte (moet zijn %d karakters)", :taken => "wordt al gebruikt", :not_a_number => "is geen getal" }