Взлом фильтра Haml Markdown на примере кода Ruby в Rails - PullRequest
0 голосов
/ 12 сентября 2010

Я использую 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;

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

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

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

1 Ответ

2 голосов
/ 12 сентября 2010

Согласно документации 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
...