Взлом фильтра Haml Markdown на примере кода Ruby в Rails

Я использую Haml в рельсах и пишу с фильтром: markdown (драгоценный камень bluecloth), но фрагмент кода примера находится в 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;

Я помещаю это до того, как начнется фильтр уценки.

Я знаю, что это можно сделать, потому что stackru не сломался, когда я написал это, так как я могу достичь этого тоже?

Заранее спасибо!

1 ответ

Решение

Согласно документации 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
Другие вопросы по тегам