Поместите ссылку во флеш [: note] - PullRequest
43 голосов
/ 12 февраля 2010

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

Ответы [ 8 ]

41 голосов
/ 04 апреля 2011

Не забудьте добавить .html_safe в конце уведомления, если вы используете Rails3. Так было бы сказать flash[:notice] = "Your message".html_safe

37 голосов
/ 07 июля 2011

Переменная экземпляра @template больше не доступна в Rails 3 .

Вместо этого вы можете использовать это в вашем контроллере:

flash[:notice] = "Successfully created #{view_context.link_to('product', @product)}.".html_safe

Надеюсь, это поможет:)

34 голосов
/ 12 февраля 2010

Возможно, я упускаю что-то очевидное, но вы должны просто уметь

flash[:notice] = %Q[Created job number <a href="/jobs/list?job=#{update.id}">#{update.id}</a>]

, а затем просто убедитесь, что вы не экранировали содержимое флэш-памяти, когда отображаете его в своем представлении.

16 голосов
/ 12 февраля 2010

Как прокомментировал nas, link_to недоступен с вашего контроллера, если вы не включите соответствующий вспомогательный модуль, но url_for есть. Поэтому я сделал бы в значительной степени то, что сказала Эмили, за исключением использования url_for вместо жесткого кодирования URL.

например. если задание было определено как ресурс в ваших маршрутах:

link = "<a href=\"#{url_for(update)}\">#{update.id}</a>"    
flash[:notice] = "Created job number #{link}"
7 голосов
/ 18 июня 2016

Выбранный ответ не работает для меня. Но ответ из этого поста сработал. Кстати, я использую Rails 4.2.4. Руководствуясь ответом, который я связал, вот как я это сделал:

View

<% 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.

4 голосов
/ 30 марта 2015

Основываясь на ответе Дориана, вот интернационализированная вспышка со ссылкой в ​​ней:

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"
4 голосов
/ 12 февраля 2010

Вы можете использовать псевдоним вашего контроллера для функции 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

2 голосов
/ 12 февраля 2010

Вы всегда можете использовать Rails link_to помощник:

flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...