方法中的返回值时,ruby块没有输出

时间:2011-03-21 04:07:43

标签: ruby-on-rails ruby haml

这是我的代码的精简版本:

帮助方法:

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 个答案:

答案 0 :(得分:1)

对于初学者,如果您不想打印0(返回值),则必须更改此行:

 = render_tree @sections do |node|

到这一行:

 - render_tree @sections do |node|

答案 1 :(得分:1)

我不是100%根据你的要求......

但是,如果您希望render_tree方法处理节点[1]中包含的HAML字符串,那么您可能希望执行类似

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

但是,我不认为这会完全你正在寻找什么。在某种程度上,我感到很困惑,因为你的构造看起来并不像“轨迹”。

或许有更多的背景会更清楚?