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

Поместите ссылку во 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]? Или мне нужно переработать, как это сообщение отображается, чтобы превратить его в ссылку?

4b9b3361

Ответ 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">&times;</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}."