Поместите ссылку во flash [: уведомление]
Я изучаю Ruby и Rails.
У меня есть проект Ruby on Rails, который отслеживает задания, выполняемые сервером. Прямо сейчас, когда я вручную создаю новое задание, он объявляет:
flash[:notice] = "Created job job number #{update.id}."
Я хотел бы превратить #{update.id}
в ссылку на задание в списке заданий.
URL для перехода к заданию jobs/list?job=1234
, где 1234 - это update.id
, который отображается в уведомлении о вспышке.
Можно ли поместить ссылку в оператор flash[:notice]
? Или мне нужно переработать, как это сообщение отображается, чтобы превратить его в ссылку?
Ответы
Ответ 1
Мне может не хватать чего-то очевидного, но вы должны просто иметь возможность делать
flash[:notice] = %Q[Created job number <a href="/jobs/list?job=#{update.id}">#{update.id}</a>]
а затем просто убедитесь, что вы не избегаете содержимого флэш-памяти, когда вы показываете его в своем представлении.
Ответ 2
Не забудьте добавить .html_safe
в конце уведомления, если вы используете Rails3.
Таким образом, было бы сказано flash[:notice] = "Your message".html_safe
Ответ 3
Переменная экземпляра @template
больше не доступна в Rails 3.
Вместо этого вы можете использовать это в своем контроллере:
flash[:notice] = "Successfully created #{view_context.link_to('product', @product)}.".html_safe
Надеюсь, что это поможет:)
Ответ 4
Как указано в комментарии, link_to
недоступен с вашего контроллера, если вы не включили соответствующий вспомогательный модуль, а url_for
. Поэтому я бы сделал довольно многое, что сказала Эмили, вместо использования url_for
вместо hardcoding URL.
например. если задание было определено как ресурс в ваших маршрутах:
link = "<a href=\"#{url_for(update)}\">#{update.id}</a>"
flash[:notice] = "Created job number #{link}"
Ответ 5
Вы можете использовать псевдоним в своем контроллере для функции link_to или рецепт RailsCast:
"Created job job number #{@template.link_to update.id,
:controller => 'jobs', :action => 'list', :job => update.id}."
http://railscasts.com/episodes/132-helpers-outside-views
Ответ 6
Основываясь на ответе Дориана, здесь интернациональная вспышка со ссылкой в ней:
flash[:notice] = t('success', go: view_context.link_to(t('product'), @product)).html_safe
Если ваш перевод (например, файл YAML) может содержать:
en:
success: "Successfully created a %{go}"
product: "product"
it:
success: "%{go} creato con successo"
product: "Prodotto"
Ответ 7
Выбранный ответ не помог мне. Но ответ из этого сообщения работал. Кстати, я использую Rails 4.2.4
. С подсказкой от ответа, который я связал, вот как я это сделал:
Вид
<% flash.each do |name, msg| %>
<div class="alert alert-<%= name %>">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<div id="flash_<%= name %>"><%= sanitize(msg) %></div>
</div>
<% end %>
контроллер
flash[:success] = "Blah blah. #{view_context.link_to('Click this link', '/url/here')}"
Магия - это метод sanitize
.
Мне не нужно было использовать .html_safe
.
Ответ 8
Вы всегда можете использовать утилиту Rails link_to
:
flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."