2013-06-26 3 views
3

Когда я использую :ruby фильтр, чтобы сделать некоторые простые вещи в Haml, к примеру ...Вывод содержимого Haml через: рубиновый фильтр

:ruby 
    to = comments > max_comments ? max_comments : comments 
    (0...to).each do |i| 
    comment = data[i] 
    puts li_comment comment[0], comment[1], comment[2] 
    end 

puts оператор записывает вывод на консоль. docs for :ruby показывают, что

Создает объект IO с именем haml_io, что пишется на него выводится в документ Haml.

Как именно один использование объект haml_io написать в Haml документа, но не к консоли (думаю, что нужно что-то другое, чем puts)?

ответ

4

Такое поведение changed recently - старое поведение (до версии 4.0) должен был написать все, что написано в стандартный вывод в документ Haml, но это не поточно.

haml_io является local variable that refers to an IO object that writes to the document. Ваш код переписан, чтобы использовать это будет выглядеть примерно так (при условии, comments, max_comments и li_comment все определены ранее):

:ruby 
    to = comments > max_comments ? max_comments : comments 
    (0...to).each do |i| 
    comment = data[i] 
    haml_io.puts li_comment comment[0], comment[1], comment[2] 
    end 

haml_io фактически StringIO object, так что вы можете использовать любой из его методов, например haml_io.write, haml_io.putc и перенаправляет вывод на ваш документ.

0

... Call надетый haml_io?

Все, что написано на нем, выводится в документ Haml.