在Haml过滤器中包含变量的内容

时间:2011-04-06 11:09:50

标签: ruby-on-rails haml

如何使article.content过滤:textile?

 - @articles.each do |article|
    %article.post
      %header=article.name
      %p
        :textile 
          =article.content
      %footer

输出

<article class="post">
    <header>game</header>
    <p>
      </p><p>=article.content</p>
    <p></p>
    <footer></footer>
  </article>

2 个答案:

答案 0 :(得分:7)

在Haml过滤器中,您可以使用字符串插值在标记中包含Ruby代码。例如:

require 'haml'                              
@x = 42                                               
Haml::Engine.new("%p= @x").render(self)              #=> "<p>42</p>\n"
Haml::Engine.new(":textile\n\t= @x").render(self)    #=> "<p>= @x</p>\n"
Haml::Engine.new(":textile\n\t\#{@x}").render(self)  #=> "<p>42</p>\n"

@content = "alpha\n\n#hi **mom**"
Haml::Engine.new(":textile\n\t\#{@content}").render(self)
#=> "<p>alpha</p>\n<p>#hi <b>mom</b></p>\n"

编辑:由于我的测试存在缺陷,我之前的回答对内容中的换行符产生了误导。如上所示,包含内容中的换行符可以直接处理。

因此,您的Haml模板应该如下所示:

- @articles.each do |article|
  %article.post
    %header=article.name
    :textile 
      #{article.content}
    %footer

请注意,我已删除了围绕您的标记的%p标记,因为Textile引入了自己的段落包装(即使对于单行内容)。

答案 1 :(得分:1)

你的语法似乎很好,如果其他一切都得到了正确的渲染,那么这可能是一个宝石问题。你安装了RedCloth吗?

编辑:第二个想法,第二行是做什么的?它可能是你的问题的原因,因为我不认为%article.post是正确的HAML语法和:纺织品过滤器在其中