JeuWeb - Crée ton jeu par navigateur
Validates + erreur - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Validates + erreur (/showthread.php?tid=4917)



Validates + erreur - Thib4s - 16-06-2010

Bonjour question peut être simple mais je ne trouve rien de pertinent dessus (en tout cas pour rails 3)
Comment faire pour afficher les erreurs d'un champ en particulier :
Par exemple :
model/user :
Code :
validates_presence_of :name, :message => "Vous devez renseigner un nom"
views/users/new.html.erb
Code :
<%= f.label :name, "Votre nom :" %>
<%= f.text_field :name %>
<%= afficher les erreur %>

Ceci est pour la version 3 de rails.


RE: Validates + erreur - Sephi-Chan - 16-06-2010

Il faut utiliser la méthode error_message_on (issue du module ActionView::Helpers::ActiveRecordHelper).


<%= f.label :name, "Votre nom :" %>
<%= f.text_field :name %>
<%= f.error_message_on :name %>


Sephi-Chan


RE: Validates + erreur - Thib4s - 16-06-2010

Ne marche pas j'avais déjà essayer :S
Il me retourne aucune erreurs


RE: Validates + erreur - Sephi-Chan - 16-06-2010

Hm, Rails 3 a bien chamboulé les helpers d'erreurs. L'API n'est pas encore publique puisque la version est en bêta (c'est dommage je trouve);

Tu peux utiliser cette notation :


<%= f.label :name, "Votre nom :" %>
<%= f.text_field :name %>
<%= f.object.errors[:name] %>

L'élément errors[:name] est un tableau.

Je vais enquêter sur le sujet pour savoir s'ils ont introduit d'autres éléments. Smile

J'en profite pour te rappeler que les validateurs ont reçu quelques améliorations, tu peux écrire des validateurs comme cela :


class User < ActiveRecord::Base

validates :name,
:presence => true,
:length => 10..100

end

Ça permet de regrouper les validateurs par attribut (nom, email, etc.) plutôt que par type de validation (presence, longueur, etc.). Cette syntaxe ne remplace pas celle que tu utilises, c'est complémentaire.


Sephi-Chan


RE: Validates + erreur - Sephi-Chan - 16-06-2010

Tu peux le mettre en forme comme ça :


<%= f.label :name, "Votre nom :" %>
<%= f.text_field :name %>
<% if f.object.errors[:name].any? %>
<ul>
<% f.object.errors[:name].each do |error| %>
<li><%= error %></li>
<% end %>
</ul>
<% end %>

Bien sûr, je te conseille de mettre tout ça dans un helper. Smile


Sephi-Chan


RE: Validates + erreur - Thib4s - 16-06-2010

Justement c'est ce que j'essaie mais j'y arrive pas Sad
comment un helper peut-il imprimer des valeurs ?


RE: Validates + erreur - Sephi-Chan - 16-06-2010

Un helper doit renvoyer une chaîne de caractères. Smile

Si tu veux faire un helper qui renvoie une liste d'erreurs d'après un modèle, tu peux faire :


def errors_messages_for(object, attribute)
elements = ""
object.errors[attribute].each do |error|
elements << content_tag(:li, error)
end

content_tag(:ul, elements, :id => "errors-for-#{attribute}", :class => 'errors')
end


Sephi-Chan