Haml Markdown过滤器破坏了Rails中的示例Ruby代码

时间:2010-09-11 22:22:41

标签: ruby-on-rails ruby haml markdown bluecloth

我在rails中使用Haml并且使用:markdown过滤器(bluecloth gem)编写,但是一段示例代码在ruby中并且页面尝试执行#{values},我该如何阻止它?

这是代码的重点:

:markdown
  like_frags = [fields].flatten.map { |f| "LOWER(#{f}) LIKE :word#{count}" }
    or_frags << "(#{like_frags.join(" OR ")})"
    binds["word#{count}".to_sym] = "%#{word.to_s.downcase}%"
    count += 1
  end

返回的错误:

undefined local variable or method `f'

我自己找到了一个解决方案,但它远非理想:

- f=nil;count=nil;like_frags=[];word=nil;

我在:markdown过滤器开始之前放置它。

我知道可以这样做,因为当我写这篇文章时stackoverflow没有破坏,所以我怎么能实现这个呢?

提前致谢!

1 个答案:

答案 0 :(得分:2)

根据Haml文档,过滤器内的插值是正常的和预期的。为了绕过它,您可以通过添加反斜杠来转义#{}插值语法:

:markdown
  like_frags = [fields].flatten.map { |f| "LOWER(\#{f}) LIKE :word\#{count}" }
    or_frags << "(\#{like_frags.join(" OR ")})"
    binds["word\#{count}".to_sym] = "%\#{word.to_s.downcase}%"
    count += 1
  end