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 に答える