0

我在 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没有中断,那么我怎么能做到这一点呢?

提前致谢!

4

1 回答 1

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
于 2010-09-11T23:02:25.170 回答