2010-01-16 4 views
3

Je me demande s'il existe un moyen de supprimer le formatage créé par les validations de rails? Mon code HTML est ci-dessous, mais au fond, s'il y a une erreur, il formatera mes erreurs dans les rails intégrés ... mais je ne voudrais pas l'avoir. Par exemple, dans le texte ci-dessous, le champ password_field sera mis en forme différemment en cas d'erreur (je ne le veux pas), et le message error_message aura une mise en forme supplémentaire lorsque je souhaiterai que le texte du message d'erreur impression. Des idées sur la meilleure façon de le faire?Comment remplacer la mise en forme html dans les erreurs de validation dans Rails?

Merci!

-<% = f.password_field: Mot de passe%>
<% = error_message_on: utilisateur,: Mot de passe%> -

Répondre

7

Jetez un oeil à ce lien dans les rails guident http://guides.rubyonrails.org/active_record_validations_callbacks.html#customizing-error-messages-css. Cela devrait vous permettre de personnaliser le code HTML pour les erreurs que vous souhaitez.

Cet exemple laissera le champ de formulaire html exactement le même, même s'il y a des erreurs.

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| 
    %(#{html_tag}) 
end 

Ensuite, nous pouvons ajouter une méthode d'aide pour rendre les erreurs:

def custom_error_message_on(object, method) 
    errors = object.errors.on(method) 
    "#{ERB::Util.html_escape(errors.is_a?(Array) ? errors.first : errors)}" 
end 

Je fondamentalement juste déshabillai ce que la error_message_on normale fait pour ce que vous avez besoin.

Maintenant, vous pouvez l'utiliser dans votre page comme ceci:

<%= f.password_field :password %> 
<%= custom_error_message_on :user, :password %> 

et la sortie html sera quelque chose comme ceci:

<input type='password' name='password' /> 
Your password is required 

Cela vous permettra de mettre ce balisage supplémentaire dont vous avez besoin et ne vous limitera pas à le faire d'une manière pour toutes vos formes.

Une autre chose que vous pourriez vouloir examiner si vous avez un certain nombre de formes qui suivent le même modèle est les constructeurs de formulaire personnalisés http://ramblingsonrails.com/how-to-make-a-custom-form-builder-in-rails.

+0

merci, John - d'ajouter à mes questions, cependant: Et si j'ai du HTML supplémentaire que je veux mettre entre le formulaire et l'erreur, et que le HTML diffère d'une forme à l'autre? Dans l'exemple ci-dessus, il me faut mettre un
entre la zone de saisie et l'erreur, mais dans mon application, ce qui est entre les deux sera différent pour chaque formulaire. – Jess

+0

J'ai mis à jour la réponse en fonction de vos commentaires, j'espère que cela aide. –

Questions connexes