Ruby on rails-将链接放入Flash [:notice]

我正在学习Ruby和Rails。

我有一个Ruby on Rails项目,该项目跟踪服务器正在运行的作业。 现在,当我手动创建新作业时,它会宣布:

flash[:notice] = "Created job job number #{update.id}."

我想将flash[:notice]变成作业列表上该作业的链接。

转到该作业的URL是flash[:notice],其中1234是在Flash通知中显示的update.id

是否可以在flash[:notice]语句中添加链接? 还是我需要重新处理此消息的显示方式以将其转换为链接?

David Oneill asked 2020-07-12T13:13:04Z
8个解决方案
42 votes

如果您使用的是Rails3,请不要忘了在通知末尾添加.html_safe。所以它会说flash[:notice] = "Your message".html_safe

Kirill answered 2020-07-12T13:13:43Z
37 votes

2963224409584174174080实例变量在Rails 3中不再可用。

相反,您可以在控制器中使用它:

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

希望这可以帮助 :)

Dorian answered 2020-07-12T13:14:11Z
34 votes

我可能缺少明显的东西,但是您应该能够

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

然后确保在视图中显示Flash时不要转义其内容。

Emily answered 2020-07-12T13:13:23Z
16 votes

正如nas所评论的那样,除非您包括适当的帮助程序模块,否则您的控制器无法提供link_to,但url_for则不可用。 因此,除了使用url_for而不是对URL进行硬编码之外,我几乎会做Emily所说的事情。

例如 如果作业在您的路线中被定义为资源:

link = "<a href=\"#{url_for(update)}\">#{update.id}</a>"    
flash[:notice] = "Created job number #{link}"
mikej answered 2020-07-12T13:14:36Z
7 votes

选择的答案对我不起作用。 但是这篇文章的答案有效。 我正在使用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')}"

魔术是.html_safe方法。

我也不需要使用.html_safe

SamuelDev answered 2020-07-12T13:15:13Z
5 votes

在多利安的答案的基础上,这是一个带有链接的国际化快讯:

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"
Giuseppe answered 2020-07-12T13:15:38Z
4 votes

您可以在控制器的link_to函数或RailsCast配方中使用别名:

"Created job job number #{@template.link_to update.id, 
  :controller => 'jobs', :action => 'list', :job => update.id}."

[HTTP://rails cast神.com/episodes/132-helpers-outside-views]

nanda answered 2020-07-12T13:16:02Z
2 votes

您可以随时使用Rails link_to帮助程序:

flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."
mattwindwer answered 2020-07-12T13:16:22Z
translate from https://stackoverflow.com:/questions/2249431/put-a-link-in-a-flashnotice