Comment puis-je formater la valeur affichée dans un des Rails de modifier le champ?
Je tiens à rendre l'édition de champs de formulaire aussi convivial que possible. Par exemple, pour les valeurs numériques, j'aimerais que le champ sera affiché avec des virgules (comme number_with_precision
).
C'est assez facile sur le côté affichage, mais que dire de l'édition? Est-il une bonne façon de le faire?
Je suis en utilisant les Rails FormBuilder. Après enquête, j'ai trouvé qu'il utilise InstanceTag, qui obtient les valeurs pour les champs en utilisant <attribute>_value_before_type_cast
qui signifie primordial <attribute>
ne sera pas appelée.
- J'ai commencé un bounty sur cette question parce que je veux savoir si il y a une meilleure réponse que ceux énoncés par JDL et moi-même. - Y!
Vous devez vous connecter pour publier un commentaire.
Le meilleur que j'ai mis au point jusqu'à présent est quelque chose comme ceci:
Ou
my_attribute
pourrait retourner la valeur mise en forme, comme ceci:Mais vous devez toujours utiliser
:value
Cela semble être beaucoup de travail.
ApplicationController
à partir de votre modèle n'est certainement pas une bonne chose pour obtenir l'habitude de le faire.Je préfère votre première réponse, avec la mise en forme se fait dans la vue. Cependant, si vous souhaitez effectuer la mise en forme dans le modèle, vous pouvez utiliser les méthodes de wrapper pour les getter et setter, et éviter d'avoir à utiliser l' :valeur de l'option entièrement.
Vous feriez quelque chose de ce genre.
Railscasts couvert avec un objet de Temps dans un text_field dans l'épisode n ° 32. Vraiment astucieux partie de cela est la façon dont ils gèrent les erreurs de validation. Il vaut la peine de regarder l'épisode rien que pour cela.
C'est une vieille question, mais au cas où quelqu'un vient sur ce, vous pouvez utiliser les number_to_X aides. Ils ont tous les attributs que vous pourriez jamais vouloir pour l'affichage de vos modifier la valeur:
Il y a plus d'attributs aussi disponibles: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html
Si vous souhaitez un format à être créées ou maintenues au cours du montage, vous aurez besoin d'ajouter du Javascript à mettre en œuvre des "masques". Voici une démo.
Il a été le premier succès, en ces résultats.
Vous pouvez utiliser le number_format plugin. En spécifiant un
number_format
pour un attribut numérique à l'intérieur de votre modèle, l'attribut s'affiche maintenant sous forme de Rails dans toutes les formes et de points de vue. Il sera également analysée de retour de ce format (lorsqu'elle est affectée par l'intermédiaire des formulaires) avant l'insertion dans la base de données. (Le plugin crée aussi purement numériqueunformatted_<attribute-name>
accesseurs qui peuvent continuer à être utilisés pour l'arithmétique, ou pour le numérique directe d'affectation ou d'extraction par vous pour une intégration transparente.)Vous pouvez également combiner les ci-dessus avec une solution d'activer Javascript, ce qui peut forcer l'utilisateur à maintenir le point décimal et les séparateurs de milliers en place lors de l'édition, même si ce n'est pas vraiment nécessaire.
J'ai fait quelque chose de similaire. Nous formater les temps et les longueurs à l'aide d'un formulaire personnalisé constructeur. Il rend l'utilisation de l'existant text_field, mais l'enveloppe de sorte que la valeur peut être personnalisé:
Et il est utilisé comme ceci:
Le résultat final est une valeur dans l'unité de base de leurs choix sur le système (Métrique, Impérial) et l'échelle IE petit = pouces ou en millimètres.
En gros, j'ai copié le text_field méthode à partir de l'existant, générateur de formulaire, qui utilise le text_field_tag lui-même.
Il y a deux problèmes: 1) Connaître le nom de l'objet et la manière d'accéder à l'objet pour obtenir la valeur à laquelle vous souhaitez formater. 2) Obtenir le nom de la droite de sorte que lorsque le formulaire est soumis, il est partie de la bonne params de hachage.
Le générateur de formulaire est donnée à une variable de classe @objet. Vous pouvez obtenir la valeur du champ à l'aide de l' .méthode d'envoi. Dans mon cas, j'ai envoyer une étiquette :feed_size_min_w à la @objet et obtenir sa longueur dos. - Je convertir mon format de votre choix, et de le donner à la text_field_tag.
Le nom du champ est la clé pour avoir de fin dans les params de hachage, dans mon cas les params[:articles] un. J'ai fait une petite fonction d'assistance appelé field_name qui prend soin de cela.
Enfin la has_error enveloppe le champ d'une erreur div si il y a des erreurs sur l'étiquette.