En utilisant Rails, j'essaie d'obtenir un message d'erreur du type "Le champ de la chanson ne peut pas être vide" lors de l'enregistrement. Procédez comme suit:
validates_presence_of :song_rep_xyz, :message => "can't be empty"
... affiche uniquement "Song Rep XYW ne peut pas être vide", ce qui n'est pas bon car le titre du champ n'est pas convivial. Comment puis-je changer le titre du champ lui-même? Je pourrais changer le nom réel du champ dans la base de données, mais j'ai plusieurs champs "chanson" et j'ai besoin d'avoir des noms de champs spécifiques.
Je ne veux pas contourner le processus de validation des rails et je pense qu'il devrait y avoir un moyen de résoudre ce problème.
la source
errors.add :base, msg
? Je voudrais savoir de quelle colonne il s'agit, afin que je puisse l'afficher dans le champ de formulaire correct.The password is wrong.
ouThe email address is not valid.
au lieu dePassword is wrong.
etEmail is not valid.
.Dans votre modèle:
À votre avis
Si vous le faites à la place
vous obtenez ce message d'erreur avec le nom de l'attribut
si vous voulez obtenir le message d'erreur pour un seul attribut
la source
validates_presence_of :address1, :message => :put_some_address_please
Essaye ça.
J'ai trouvé ça ici .
Voici une autre façon de procéder. Ce que vous faites est de définir une méthode human_attribute_name sur la classe de modèle. La méthode reçoit le nom de colonne sous forme de chaîne et renvoie la chaîne à utiliser dans les messages de validation.
Le code ci-dessus est d' ici
la source
Oui, il existe un moyen de le faire sans le plugin! Mais ce n'est pas aussi propre et élégant que d'utiliser le plugin mentionné. C'est ici.
En supposant que c'est Rails 3 (je ne sais pas si c'est différent dans les versions précédentes),
gardez ceci dans votre modèle:
et dans la vue, au lieu de partir
comme ce serait le cas lorsque nous utilisons le générateur d'échafaudage, mettez:
Et vous obtiendrez juste le message que vous avez spécifié dans le modèle, sans le nom de l'attribut.
Explication:
Jusqu'à présent, nous n'affichons qu'un seul message, toujours pour la première erreur. Si vous voulez afficher toutes les erreurs, vous pouvez faire une boucle dans le hachage et afficher les valeurs.
J'espère que cela a aidé.
la source
Code Rails3 avec des messages entièrement localisés:
Dans le modèle user.rb définissez la validation
Dans config / locales / en.yml
la source
Dans la méthode de validation personnalisée, utilisez:
errors.add(:base, "Custom error message")
car add_to_base est obsolète.
errors.add_to_base("Custom error message")
la source
Lié à la réponse acceptée et à une autre réponse dans la liste :
Je confirme que le fork de nanamkim de custom-err-msg fonctionne avec Rails 5 et avec la configuration locale.
Il vous suffit de démarrer le message de paramètres régionaux avec un signe d'insertion et il ne doit pas afficher le nom d'attribut dans le message.
Un modèle défini comme:
avec les éléments suivants
en.yml
:item.errors.full_messages
Affichera:au lieu de l'habituel
Name You can't create an item without a name
la source
Je recommande d'installer le joyau custom_error_message (ou en tant que plugin ) écrit à l'origine par David Easley
Il vous permet de faire des choses comme:
la source
gem "custom_error_message"
à votre Gemfile - voir github pour plus de détailsUne solution pourrait être de changer le format d'erreur par défaut i18n:
La valeur par défaut est
format: %{attribute} %{message}
la source
Voici une autre façon:
Si vous utilisez ce modèle:
Vous pouvez écrire votre propre message personnalisé comme ceci:
De cette façon, en raison du trait de soulignement, le message complet devient "Mon message personnalisé", mais l'espace supplémentaire au début est imperceptible. Si vous ne voulez vraiment pas cet espace supplémentaire au début, ajoutez simplement la
.lstrip
méthode.La méthode String.lstrip supprimera l'espace supplémentaire créé par ': _' et laissera les autres messages d'erreur inchangés.
Ou encore mieux, utilisez le premier mot de votre message personnalisé comme clé:
Maintenant, le message complet sera "Mon message personnalisé" sans espace supplémentaire.
Si vous voulez que le message complet commence par un mot en majuscule comme "URL ne peut pas être vide", cela ne peut pas être fait. Essayez plutôt d'ajouter un autre mot comme clé:
Maintenant, le message complet sera "L'URL ne peut pas être vide"
la source
errors.add(:_, 'foobar')
et obtenir 'foobar' comme messageFaites-le normalement:
Mais affichez-le comme ceci à la place
Retour
La méthode de localisation est certainement la façon "appropriée" de le faire, mais si vous faites un petit projet non global et que vous voulez simplement aller vite - c'est certainement plus facile que le saut de fichier.
Je l'aime pour la possibilité de mettre le nom du champ ailleurs que au début de la chaîne:
la source
Si vous voulez tous les lister dans une belle liste mais sans utiliser le nom cruddy non humain friendly, vous pouvez le faire ...
la source
À votre avis
Lorsque vous souhaitez remplacer le message d'erreur sans le nom d'attribut, ajoutez simplement le message avec ^ comme ceci:
la source
J'ai essayé de suivre, j'ai travaillé pour moi :)
1 job.rb
2 jobs_controller.rb
3 _form.html.erb
la source
Voici mon code qui peut vous être utile au cas où vous en auriez encore besoin: Mon modèle:
Ensuite, j'ai créé un assistant pour afficher les messages:
la source
La seule façon dont j'ai pu obtenir toute la personnalisation que je voulais était d'utiliser un
after_validation
rappel pour me permettre de manipuler le message d'erreur.Autorisez la création du message de validation comme d'habitude, vous n'avez pas besoin d'essayer de le modifier dans l'aide à la validation.
créer un
after_validation
rappel qui remplacera ce message de validation dans le back-end avant qu'il ne parvienne à la vue.Dans la
after_validation
méthode, vous pouvez faire tout ce que vous voulez avec le message de validation, comme une chaîne normale! Vous pouvez même utiliser des valeurs dynamiques et les insérer dans le message de validation.La méthode after_validation aura une portée bien plus grande que l'aide à la validation des rails intégrée, vous pourrez donc accéder à l'objet que vous validez comme vous essayez de le faire avec object.file_name. Ce qui ne fonctionne pas dans l'assistant de validation où vous essayez de l'appeler.
Remarque: nous utilisons le
^
pour se débarrasser du nom d'attribut au début de la validation comme @Rystraum l'a souligné en référençant ce joyaula source
La réponse de graywh est la meilleure si elle est réellement différente dans l'affichage du nom du champ. Dans le cas d'un nom de champ dynamique (basé sur d'autres champs à afficher), je ferais quelque chose comme ça
la méthode full_message sur l'autre est ce que les rails utilisent à l'intérieur de la méthode full_messages, donc elle donnera les erreurs Rails normales pour les autres cas (Rails 3.2 et plus)
la source