2010-06-04 5 views
8

mon problème: Je veux créer une classe TitlePanel dans mon dossier lib, cette classe utilise la méthode content_tag mais je n'arrive pas à comprendre comment la charger. J'ai essayé tous exigent 'xxx' que je pouvais penser et il continue à me donner des messages d'erreur qu'il ne peut pas trouver le fichier requis. En fait, ce que j'essaie de faire est de créer un assistant qui génère du HTML, mais je dois passer par une classe pour stocker une certaine valeur en premier. Ex de ce que j'essaye de faire:comment utiliser content_tag dans une lib/class

title = TitlePanel.new("this is my title") 
title.add_panel "help" do 
    content_tag :div, "this is the help section..." 
end 
title.add_panel "search" do 
    content_tag :div, "this is the search section..." 
end 

title.to_s 

la sortie étant tout le HTML requis pour faire ce travail.

Répondre

7

Essayez cette photo. Si vous incluez TagHelper en haut de votre fichier dans votre répertoire lib, cela devrait fonctionner. Voici un exemple:

class MyLib 
    include ActionView::Helpers::TagHelper 

    def foo(x) 
    content_tag :div, x 
    end 
end 


>> MyLib.new.foo "bar" 
=> "<div>bar</div>" 
+0

Situation améliorée un peu. Il se plaint maintenant de la capture de la méthode manquante. Voici mon code complet classe TitlePanel comprennent ActionView :: :: Helpers TagHelper def initialize (t, d = "default") @title = t = d @description @labels = [] @ panneau = Hash.new fin def add_panel (label, et bloc) @labels << étiquette @panel [label] = rendement fin fin – Alain

+0

formating améliorée, mais retiré la méthode .to_s - merde, formattage ne fonctionne pas pour des commentaires? – Alain

+0

Je ne suis pas sûr de ce qui se passe dans votre exemple de code. Mais, si vous voulez juste utiliser la méthode content_tag dans le module de votre répertoire lib, vous devriez simplement ajouter ce bit au début de votre fichier: include ActionView :: Helpers :: TagHelper –

5

Ceci est une vieille question, mais je l'ai trouvé d'abord et j'ai eu le même problème que OP. La meilleure solution que j'ai trouvé était d'utiliser ceci:

ActionController::Base.helpers.content_tag(:div, class: 'my_div') 
Questions connexes