Сообщение Flash с html_safe с контроллера в Rails 4 (безопасная версия)
В моем контроллере у меня есть следующий код:
format.html { redirect_to new_customer_url,
notice: %Q[ A customer already exists with with this shopping id. Edit this customer #{view_context.link_to("here", edit_customer_url(@duplicate))}.
].html_safe
Я хотел бы иметь возможность включить ссылку во флэш-сообщение, поэтому (как вы можете видеть) я вызываю html_safe для отмены строки. Однако, похоже, что с Rails 4.1 это теперь обрабатывается по-разному. (Здесь здесь и здесь)
Решение этого вопроса представлено в этом вопросе. Тем не менее, это происходит только при перемещении вызова html_safe
к представлению, что приводит к отключению всех флеш-сообщений.
Я бы предпочел быть немного более параноидальным, чем это, есть ли способ включить ссылку в флэш-сообщение от контроллера?
Ответы
Ответ 1
Вот один из возможных способов решения этой проблемы. Добавьте фильтр до ApplicationController
, который сделает flash[:notice]
html безопасным только в том случае, если установлен flash[:html_safe]
. Затем вы можете контролировать, когда и когда не делать уведомления html полностью безопасными от контроллера.
before_filter -> { flash.now[:notice] = flash[:notice].html_safe if flash[:html_safe] && flash[:notice] }
Затем ваш пример можно было бы изменить следующим образом:
format.html do
redirect_to(
new_customer_url,
notice: %Q[ A customer already exists with with this shopping id. Edit this customer #{view_context.link_to("here", edit_customer_url(@duplicate))}.],
flash: { html_safe: true }
)
end