11
votes

Rails: Pourquoi la méthode "numéro_with_delimiter" n'est-elle pas reconnue dans mon modèle?

J'ai une validation simple: xxx

sur ce code, j'ai reçu l'erreur suivante: xxx

J'ai essayé d'ajouter : xxx

mais cela n'a pas aidé.

Qu'est-ce que je manque?


0 commentaires

5 Réponses :


2
votes

Vous manquerez peut-être que la dépendance ... est la classe numérohelper accessible à votre application?

vérifier le Rails officiels Docs


0 commentaires

16
votes

Le vrai problème ici est que vous incluez ce module dans la classe, plutôt que de prolonger la classe avec elle.

Les différences sont une inclusion rendra les méthodes disponibles sur l'instance, où l'agrandir fera leur où vous essayez de les utiliser: sur la classe. p>

par exemple méthode Utilisez P>

extend ActionView::Helpers::NumberHelper


5 commentaires

@RYAN: Je comprends que, y compris l'intérieur de la classe, est équivalente à définir mes propres méthodes dans cette classe, non? Cela signifie-t-il que je pourrais utiliser auto.number_with_delimiter (...) ? Lorsque vous placez le Inclure à l'extérieur de la classe, sont toutes des méthodes à l'intérieur Actionview :: Helpers :: NumberHelper devient global?


@ Misha: Oui, ils deviendraient mondiaux mais ce n'est généralement pas une bonne idée (TM). La meilleure chose à faire dans ce cas est de étendre la classe avec le module.


@RYAN: Comment prolonger la classe produit avec le module NumberHelper ? N'est-ce pas ce que j'ai fait ci-dessus?


@Misha: Non, vous êtes Inclure 'ing le module. étendre est différent.


@RYAN: Je suis confus. Y compris le module dans la classe du modèle est exactement ce que j'ai fait ci-dessus, et cela n'a pas fonctionné. Cela a toutefois fonctionné lorsque j'ai déplacé le inclure en dehors de la classe.



3
votes

Vous devez utiliser EXTEND:

Utilisation: EXTENDY ACTIONVIEW :: Helpers :: NumberHelper

C'est bon pour moi


0 commentaires

5
votes

au lieu d'étendre le module actionview . Vous pouvez utiliser des méthodes à partir de ActiveSupport à la place

Par exemple:

ActiveSupport :: NuméraireHelper :: Number_To_Currency (10000.1234, {Precision: 2, Unité: ''})


1 commentaires

Est-ce mieux d'un point de vue de la performance en termes d'utilisation de la mémoire?



0
votes

bonne réponse, utilisez:

ActiveSupportport :: NumberHelper :: Number_To_Delimited (numéro, options = {})


0 commentaires