2012-05-07 11 views
7

¿Qué estoy haciendo mal con este ayudante para mi plantilla HAML?haml_tag salidas directamente a la plantilla de Haml

def display_event(event) 
    event = MultiJson.decode(event) 
    markup_class = get_markup_class(event) 
    haml_tag :li, :class => markup_class do 
     haml_tag :b, "Foo" 
     haml_tag :i, "Bar" 
    end 
    end 

Este es el error:

haml_tag outputs directly to the Haml template. 
Disregard its return value and use the - operator, 
or use capture_haml to get the value as a String. 

La plantilla está llamando display_event así:

- @events.each do |event| 
    = display_event(event) 

Si yo estaba usando marcado regulares que ampliaría a la siguiente

%li.fooclass 
    %b Foo 
    %i Bar 

Respuesta

10

La pista está en el erro r mensaje:

Disregard its return value and use the - operator, 
or use capture_haml to get the value as a String. 

A partir de los documentos de haml_tag:

haml_tag outputs directly to the buffer; its return value should not be used. If you need to get the results as a string, use #capture_haml .

solucionarlo, ya sea a cambiar su Haml:

- @events.each do |event| 
    - display_event(event) 

(es decir, utilizar el operador en lugar de =-), o cambiar el método a utilizar capture_haml:

def display_event() 
    event = MultiJson.decode(event) 
    markup_class = get_markup_class(event) 
    capture_haml do 
    haml_tag :li, :class => markup_class do 
     haml_tag :b, "Foo" 
     haml_tag :i, "Bar" 
    end 
    end 
end 

Esto hará que el método devuelva una cadena, que luego se puede mostrar con = en su Haml.

Tenga en cuenta que debe hacer solo uno de estos cambios, si los hace se cancelarán mutuamente y no se mostrará nada.

Cuestiones relacionadas