2010-06-04 11 views
8

mi problema: quiero crear una clase TitlePanel en mi carpeta lib que clase usa el método content_tag pero no puedo encontrar la manera de cargarlo. He intentado todos requieren 'xxx' que podría pensar y me sigue dando mensajes de error que no puede encontrar el archivo requerido.cómo usar content_tag en una lib/clase

Básicamente, lo que estoy tratando de hacer es crear un helper que genere html, pero tengo que pasar a través de una clase para almacenar algún valor primero. Ex de lo que estoy tratando de hacer:

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 

siendo la salida todo el HTML requerido para que esto funcione.

Respuesta

7

Dale una oportunidad. Si incluye TagHelper en la parte superior de su archivo en su directorio lib, debería funcionar. Aquí hay un ejemplo:

class MyLib 
    include ActionView::Helpers::TagHelper 

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


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

La situación mejoró un poco. Ahora se queja de la captura del método faltante. Aquí está mi código completo TitlePanel clase incluyen ActionView :: Helpers :: TagHelper def initialize (t, d = "default") @title = t = d @description @labels = [] @ Panel = Hash.new extremo def add_panel (etiqueta, y de bloque) @labels << etiqueta @panel [etiqueta] = rendimiento extremo extremo – Alain

+0

mejorada formating pero eliminado el método .to_s - basura, formating no funciona para comentarios ? – Alain

+0

No estoy seguro de qué está pasando en su muestra de código. Pero, si solo quiere usar el método content_tag dentro del módulo en su directorio lib, entonces debería poder agregar este bit a la parte superior de su archivo: incluir ActionView :: Helpers :: TagHelper –

5

Esta es una pregunta anterior, pero encontré esto primero y tuve el mismo problema que OP. La mejor solución que encontré fue usar esto:

ActionController::Base.helpers.content_tag(:div, class: 'my_div') 
Cuestiones relacionadas