J'écris un modèle qui gère l'entrée utilisateur à partir d'une zone de texte. Suivant les conseils de http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input , je nettoie l'entrée dans le modèle avant de l'enregistrer dans la base de données, en utilisant le before_validate rappeler.
Les parties pertinentes de mon modèle ressemblent à ceci:
include ActionView::Helpers::SanitizeHelper
class Post < ActiveRecord::Base {
before_validation :clean_input
...
protected
def clean_input
self.input = sanitize(self.input, :tags => %w(b i u))
end
end
Inutile de dire que cela ne fonctionne pas. J'obtiens l'erreur suivante lorsque j'essaie d'enregistrer une nouvelle publication.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Apparemment, SanitizeHelper crée une instance de HTML :: WhiteListSanitizer, mais quand je le mélange dans mon modèle, il ne trouve pas HTML :: WhiteListSanitizer. Pourquoi? Que puis-je faire pour résoudre ce problème?
la source
stack level too deep
. C'est dans une méthode before_save.Cela vous donne juste la méthode d'assistance sans les effets secondaires du chargement de chaque méthode ActionView :: Helpers dans votre modèle:
la source
Cela fonctionne mieux pour moi:
Facile:
Avance:
Source: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
la source
ApplicationController.master_helper_module
n'existe plus dans les rails 3 et 4 il apparaît. LeApplicationController.helpers
est un bon cependant.Pour accéder aux helpers depuis vos propres contrôleurs, utilisez simplement:
la source
ApplicationController.helpers.order_number(@order)
. Cela signifie que laorder_number
localisation était surOrder Helper
Je ne recommanderais aucune de ces méthodes. Au lieu de cela, placez-le dans son propre espace de noms.
la source
Si vous souhaitez utiliser
my_helper_method
un modèle à l' intérieur d'un modèle, vous pouvez écrire:la source