【问题标题】:How to write a helper in Ruby on Rails to capture Haml blocks?如何在 Ruby on Rails 中编写帮助程序来捕获 Haml 块?
【发布时间】:2011-03-29 23:25:57
【问题描述】:

我正在编写一个 Rails 辅助方法,它将包装器 html 添加到捕获的内容块并替换 content_for 方法,例如

- content_for :header do
 //haml code

..会变成

- content :header do
 //haml code

为了做到这一点,我使用了 Haml 和 Ruby 块。就是这个样子

def content(name,&block)
 content_for name do
   capture_haml do
     haml_tag "div",{:id=>name.to_s} do
       haml_tag "div",{:id=>"#{name.to_s}_group"} do
         block
       end  
     end    
   end      
 end  
end

但我无法让它工作。没有错误信息。它根本不显示块!我不确定我做错了什么。我很感激第二个意见。

【问题讨论】:

    标签: ruby-on-rails ruby haml helpers


    【解决方案1】:

    你在做大致正确的事情,但你实际上并没有调用块 #content 被传递。为此,请使用 block.call 或 Ruby 内置的 yield 语句。

    【讨论】:

      【解决方案2】:

      改一下

      haml_tag "div",{:id=>"#{name.to_s}_group"} do
        yield
      end
      

      haml_tag "div",{:id=>"#{name.to_s}_group"},&block
      

      【讨论】:

      • 这两者在行为上实际上是完全等价的。 (&block 版本的性能可能稍高一些,但现在它们大致相同。)正如@nex3 指出的那样,OP 并没有调用yield,而是简单地返回block 而没有调用它。
      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      相关资源
      最近更新 更多