Я хочу флэш-сообщение, которое выглядит примерно так:
"Эта ссылка для подтверждения недействительна или устарела. Нажмите здесь, чтобы создать новую ссылку."
Где «нажмите здесь» - это, конечно, ссылка на другое действие в приложении, где можно создать новую ссылку для подтверждения. Два недостатка: во-первых, поскольку link_to не определено в контроллере, где устанавливается флэш-сообщение, я должен поместить ссылку html в себя. Ничего страшного, но немного грязно.
Номер два: для того, чтобы ссылка действительно отображалась на странице, я должен html_safe использовать функцию флеш-отображения в представлении, поэтому теперь она выглядит (используя Haml):
- flash.each do |name, message|
= content_tag :div, message.html_safe
Это заставляет меня задуматься. Все остальное, что я использовал в html_safe, - это HTML, который я сам написал в помощниках и еще много чего, но содержимое флэш-хэша хранится в файле cookie на стороне клиента и может быть изменено. Я обдумал это и не понимаю, как это может привести к атаке XSS, но в любом случае я не очень хорошо понимаю XSS.
Итак, два вопроса:
1. Есть ли какая-либо опасность в html_safe всегда - все содержимое флэш-памяти, как это?
2. Тот факт, что это решение настолько грязное (нарушение MVC с помощью HTML в контроллере, всегда html_safe-все содержимое флэш-памяти), заставляет меня думать, что я ошибаюсь. Есть ли более элегантный способ Rails-ish сделать это?
Я использую Rails 3.0.0.beta3.