Champ Email:
<label for="job_client_email">Email: </label>
<input type="email" name="job[client_email]" id="job_client_email">
ressemble à ça:
Mais, si la validation de l'e-mail échoue, cela devient:
<div class="field_with_errors">
<label for="job_client_email">Email: </label>
</div>
<div class="field_with_errors">
<input type="email" value="wrong email" name="job[client_email]" id="job_client_email">
</div>
qui ressemble à ceci:
Comment éviter ce changement d'apparence?
ruby-on-rails
ruby-on-rails-3
validation
field-with-errors
Misha Moroshko
la source
la source
Réponses:
Vous devriez passer outre
ActionView::Base.field_error_proc
. Il est actuellement défini comme ceci dansActionView::Base
:Vous pouvez le remplacer en le mettant dans la classe de votre application à l'intérieur
config/application.rb
:Redémarrez le serveur rails pour que cette modification prenne effet.
la source
label
et leinput
sont emballés? Comment Rails décide de ce qu'il faut emballer?f.label :password
etf.password_field :password
dans le@resource.errors
il y aurait un[:password]
jeu d'erreurs.La différence visuelle que vous voyez se produit parce que l'
div
élément est un élément de bloc. Ajoutez ce style à votre fichier CSS pour qu'il se comporte comme un élément en ligne:la source
display:
propriété utilisée (et les autres styles de mise en page) sur lehtml_tag
.display
propriété utilisée avant l'ajout de ce css est lablock
cause de la différence visuelle qui n'est pas souhaitée. Cela n'annule aucun autre style de mise en page sur la balise. Cependant, la réponse de Ryan Bigg est parfaite si vous souhaitez modifier / supprimer la balise qui entoure le champ avec des erreurs.J'utilise actuellement cette solution, placée dans un initialiseur:
Cela me permet simplement d'ajouter un nom de classe à la balise appropriée, sans créer d'éléments supplémentaires.
la source
label
.Le code supplémentaire est ajouté par
ActionView::Base.field_error_proc
. Si vous n'utilisez pasfield_with_errors
pour styliser votre formulaire, vous pouvez le remplacer dansapplication.rb
:Vous pouvez également le changer en quelque chose qui convient à votre interface utilisateur:
la source
Je travaille avec Rails 5 et Materialise-Sass et j'obtiens des problèmes avec le comportement par défaut de Rails pour traiter les validations de champ ayant échoué comme dans l'image ci-dessous et c'était à cause du supplément
div
ajouté aux champs de saisie où la validation a échoué.Travailler avec @Phobetron answer et modifier la réponse d'Hugo Demiglio aussi. J'ai apporté quelques ajustements à ces blocs de code et j'obtiens quelque chose qui fonctionne bien dans les cas suivants:
input
etlabel
ont leur propreclass
attribut n'importe où<input type="my-field" class="control">
<label class="active" for="...">My field</label>
input
oulabel
n'ont pas d'class
attribut<input type="my-field">
<label for="...">My field</label>
label
balise a une autre balise à l'intérieur avec leclass attribute
<label for="..."><i class="icon-name"></i>My field</label>
Dans tous ces cas, la
error
classe sera ajoutée aux classes existantes dans l'class
attribut si elles existent ou elle sera créée si elle n'est pas présente dans l' étiquette ou les balises d' entrée .J'espère que cela pourrait être utile pour quelqu'un avec les mêmes conditions que moi.
la source
En plus de @phobetron answer, qui ne fonctionne pas lorsque vous avez une autre balise avec un attribut de classe, comme
<label for="..."><i class="icon my-icon"></i>My field</label>
.J'ai fait quelques changements sur sa solution:
la source
Si pour une raison quelconque vous travaillez toujours sur Rails 2 (comme moi), consultez le message SO ici .
Il propose un script à mettre dans les initialiseurs.
la source
Une chose à garder à l'esprit (comme je l'ai découvert aujourd'hui) est que si vous faites flotter soit l'étiquette, soit les champs d'entrée (je fais flotter tous les champs d'entrée à droite), le css se cassera même si vous remplacez ActionView :: Base.field_error_proc.
Une alternative consiste à abaisser un niveau plus profond dans le formatage CSS comme ceci:
la source
J'ai fait une option pour désactiver cette chose terrible pour certains objets
Alors peut l'utiliser comme ceci:
la source
C'est ma solution qui s'ajoute à la réponse de @ Phobetron. En plaçant ce code dans
application.rb
, vos balises<p>
et<span>
générées par lesform.error :p
appels correspondants recevront lafields_with_errors
balise css. Le reste recevra laerror
classe CSS.J'ai trouvé de cette façon la plus flexible et la plus discrète de toutes les précédentes pour styliser la réponse sur mes formulaires.
la source
Si c'est juste à des fins de style (cela ne vous dérange pas
div
), vous pouvez simplement ajouter ceci à votre css:Le
div
agira comme unspan
et il ne sera pas interférer avec votre conception (depuisdiv
est un élément de bloc -display: block;
- par défaut, il provoquera une nouvelle ligne après sa fermeture,span
estinline
, donc il ne fonctionne pas).la source
Si vous souhaitez simplement désactiver les erreurs pour certains éléments, par exemple les cases à cocher , vous pouvez le faire:
la source
S'il ne s'agit que de problèmes de style, nous pouvons écraser "field_with_errors". Mais comme cela pourrait affecter d'autres formulaires dans notre application, il est préférable d'écraser la classe "field_with_errors" par sous cette forme uniquement.
Considérant que 'parent_class' est l'une des classes parentes du champ d'erreur du formulaire (soit la classe du formulaire, soit la classe de l'un des éléments parent du champ d'erreur), alors
Cela résoudra le problème et ne perturbera pas non plus les autres formulaires de notre application.
OU
Si nous devons remplacer le style de "field_with_errors" pour toute l'application, alors comme @dontangg l'a dit,
fera le correctif. J'espère que ça aide :)
la source
Si vous ne voulez pas changer
field_error_proc
pour l'ensemble de votre application, le dépliage de jQuery peut fournir une solution plus ciblée pour des problèmes spécifiques, par exemple,la source