Взлом фильтра 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