Publié par marc | 0 commentaires

Si vous avez déjà travaillé au développement de plusieurs applications Rails, il est possible qu’un jour, vous vous soyez dit : “J’en ai marre de cette tartine que me génère error_messages_for”.

A force de bidouille par-ci par là vous êtes parvenu à un résultat qui vous convenait. Mais comment afficher les erreurs d’un champ de manière élégante, par exemple, juste à côté du champ ? Le FormBuilder est votre ami !

On aimerait arriver à ce résultat là :

Créons notre Builder lib/error_form_builder.rb qui étend le FormBuilder de ‘base’

   1  class ErrorFormBuilder < ActionView::Helpers::FormBuilder
   2  end

Dans ce builder, on va surdéfinir les helpers pour les éléments d’un formulaire. Nous ne ferons le détail que pour le textfield, pour les autres éléments, il suffit de suivre le même exemple en analysant bien la structure de l’objet dans le FormBuilder de base.

C’est partit :

   1  def text_field(method, options = {})
   2        object = @template.instance_variable_get("@#{@object_name}")
   3        unless object.nil? || options[:hide_errors]
   4          errors = object.errors.on(method.to_sym)
   5          if errors
   6            text = " <span class=\"error\">
   7                #{errors.is_a?(Array) ? errors.first : errors}</span>"
   8          end
   9        end
  10        @template.text_field(@object_name, method, 
  11           objectify_options(options))+text.to_s
  12    end

La première chose que l’on fait dans ce nouveau helper text_field, c’est récupérer l’objet. Ensuite on vérifie s’il contient des erreurs relatives à la méthode que l’on passe en paramètre. Et si il y a des erreurs relatives à cette méthode, on vient concaténer un bloc span contenant le premier message d’erreur.

Un peu de css :

   1  span.error {
   2    color:#c30;
   3    float:left;
   4    display:block;
   5    font-size:1.1em;
   6    font-weight:bold;
   7    line-height:14px;
   8    text-align:left;
   9    padding:0px 0 0 5px;
  10    width:190px;
  11  }

Et voilà ! Une toute nouvelle manière d’ajouter les erreurs dans vos formulaires, et pour pas des masses d’effort ;)

0 Commentaires

Ajouter un commentaire

Vous devez être identifié pour poster un commentaire. Identifiez-vous, ou inscrivez-vous si ce n'est déjà fait.