Utiliser les helpers dans le modèle: comment puis-je inclure helper dépendances?
Je suis en train d'écrire un modèle qui gère la saisie de l'utilisateur à partir d'une zone de texte. En suivant les conseils de http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input, je suis le nettoyage de l'entrée dans le modèle, avant l'enregistrement dans la base de données, à l'aide de la before_validate de rappel.
Les parties pertinentes de mon modèle ressembler à 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. Je reçois le message d'erreur suivant lorsque j'essaie d'enregistrer un nouveau Post.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Apparemment, SanitizeHelper crée une instance de HTML::WhiteListSanitizer, mais quand je le mélange à mon modèle, il ne peut pas trouver de HTML::WhiteListSanitizer. Pourquoi? Que puis-je faire pour le réparer?
Vous devez vous connecter pour publier un commentaire.
Il suffit de changer la première ligne comme suit :
qui font qu'il fonctionne.
Mise à JOUR: Pour Rails 3, utilisation:
De crédit va à lornc réponse
stack level too deep
. C'est dans un before_save méthode.ActionController::Base.helpers.sanitize(str, tags: [])
ActionController::Base.helpers
seulement vous obtient les construit dans les Rails des aides. Si vous voulez également que vos applications personnalisées à l'échelle aides, vous devezApplicationController.helpers
.Cela vous donne juste la méthode helper sans les effets secondaires de chargement de chaque ActionView::Aides méthode dans votre modèle:
Cela fonctionne mieux pour moi:
Simple:
L'avance:
Source: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
ApplicationController.master_helper_module
n'existe plus dans Rails 3 et 4, il apparaît. LeApplicationController.helpers
est un bel un bien.Pour accéder à des aides à partir de vos propres contrôleurs, il suffit d'utiliser:
ApplicationController.helpers.order_number(@order)
. Que signifie leorder_number
était recherchez surOrder Helper
Je ne recommanderais pas l'une de ces méthodes. Au lieu de cela, le mettre à l'intérieur de son propre espace de noms.
Si vous souhaitez utiliser l'une de l'
my_helper_method
à l'intérieur d'un modèle, vous pouvez écrire: