Нет вывода из блока ruby, когда возвращаемое значение в методе - PullRequest
0 голосов
/ 21 марта 2011

Вот урезанная версия моего кода:

Вспомогательный метод:

def render_tree nodes, &block
  block.call nodes[1]
  return 0
end

и мой файл HAML:

    = render_tree @sections do |node|
        - logger.debug("BLOCK CALLED");
        = node.title

Код должен напечатать node.title с методом, возвращающим 0. Вместо этого он просто печатает «0» (возвращаемое значение).

Если я закомментирую return 0 будет напечатан node.title.

В обеих ситуациях отладчик выводит «BLOCK CALLED».

Я хочу напечатать «test» и вернуть 0. Что я здесь не так делаю?

Редактировать: Так что я полагаю, что HAML выводит все, что возвращается из метода. Полный пример - рекурсивный метод, который печатает кучу вещей. Как я могу заставить его обрабатывать HAML, а не просто возвращать его?

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Я не на 100% на то, что вы спрашиваете ...

Но, если вы хотите, чтобы метод render_tree обрабатывал строку HAML, содержащуюся в узлах [1], тогда вы захотите сделать что-то вроде

def render_tree(nodes, &block)
  html = Haml::Engine.new(nodes[1]).render.html_safe
  block.call(html)
end

Но я не думаю, что это сделает вполне то, что вы ищете. Отчасти я в замешательстве, потому что ваша конструкция не выглядит очень "нелепой".

Возможно, с немного большим контекстом было бы яснее?

1 голос
/ 21 марта 2011

Для начала, если вы не хотите печатать 0 (возвращаемое значение), вы должны изменить эту строку:

 = render_tree @sections do |node|

к этой строке:

 - render_tree @sections do |node|
...