Rails 3: пользовательский ввод не работает по-разному в представлениях и почтовых программах - PullRequest
5 голосов
/ 24 июля 2011

Я использую следующий набор кода как в моих представлениях, так и в почтовой программе:

<%= simple_format(auto_link(h(user_input))) %>

Я начинаю с вызова html_safe (h) для user_input, чтобы избежать любого опасного кода. Затем я вызываю auto_link, чтобы включить любые ссылки в их входных данных, а затем я вызываю simple_format, чтобы включить разрывы строк и тому подобное.

На мой взгляд, это прекрасно работает и правильно отображает следующее, полностью экранированное, но с рабочей ссылкой:

" http://google.com "

Однако, когда то же самое отображается в электронном письме ActionMailer, я вижу, что все специальные символы, включая мою автолинк, дважды экранированы (например, &amp;quot; не отображается правильно):

&amp;quot; &lt;a href=3D&quot;http://google.com&quot;&gt;http://google.=com&lt;/a&gt; &amp;quot;

По какой-то причине мне нужно снова пометить его как html_safe, чтобы он заработал:

<%= simple_format(auto_link(h(user_input))).html_safe %>

Это правильно выводит:

&quot; <a href=3D"http://google.com">http://google.com</a> &quot;

Есть идеи, почему ActionView и ActionMailer по-разному обрабатывают один и тот же код?

1 Ответ

6 голосов
/ 11 августа 2011

Если вы вызываете simple_format из шаблона электронной почты (для рендеринга разрывов строк), поведение, которое вы получаете, ужасно необычно, и оказывается, что этот помощник перезаписывается с помощью частного метода.

В любом случае, вы можете получить доступ к simple_format в шаблоне электронной почты, используя этот хак:

ApplicationController.helpers.simple_format()

Надеюсь, в другом выпуске рельсов это будет исправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...