我在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没有破坏,所以我怎么能实现这个呢?
提前致谢!
答案 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