Подтвердить что ты не робот

Сообщение 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 к представлению, что приводит к отключению всех флеш-сообщений.

Я бы предпочел быть немного более параноидальным, чем это, есть ли способ включить ссылку в флэш-сообщение от контроллера?

4b9b3361

Ответ 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